[
https://issues.jboss.org/browse/JBIDE-21686?page=com.atlassian.jira.plugi...
]
Andre Dietisheim edited comment on JBIDE-21686 at 2/17/16 10:19 AM:
--------------------------------------------------------------------
I see 2 competing accesses to the UI thread that race with the lock for the
OpenShiftProjectCache:
* Current UI thread execution: Connection wizard is saving the connection that it
successfully authenticated and triggers an update in the OpenShiftProjectCache.
OpenShiftProjectCache#connectionChanged is waiting for the instance lock (synchronized
method)
{code:title=*holds* UI thread lock, *waits* for OpenShiftProjectCache lock}
CredentialsPrompter#promptAndAuthenticate > ConnectionWizardPage#saveConnection >
ConnectionsRegistry#update > OpenShiftProjectCache#connectionChanged
{code}
{code}
Thread [main] (Suspended)
owns: RunnableLock (id=519)
waiting for: OpenShiftProjectCache (id=376)
OpenShiftProjectCache.connectionChanged(IConnection, String, Object, Object) line: 80
ConnectionsRegistry.fireChange(IConnection, int, String, Object, Object) line: 165
ConnectionsRegistry.update(IConnection, IConnection) line: 295
ConnectionWizardPageModel.saveConnection() line: 456
ConnectionWizardPage.connect() line: 405
ConnectionWizard.performFinish() line: 46
WizardDialog.finishPressed() line: 799
WizardDialog.buttonPressed(int) line: 429
Dialog$2.widgetSelected(SelectionEvent) line: 619
TypedListener.handleEvent(Event) line: 248
EventTable.sendEvent(Event) line: 84
Display.sendEvent(EventTable, Event) line: 4481
Button(Widget).sendEvent(Event) line: 1329
Display.runDeferredEvents() line: 3819
Display.readAndDispatch() line: 3430
WizardDialog(Window).runEventLoop(Shell) line: 827
WizardDialog(Window).open() line: 803
WizardUtils.openWizardDialog(IWizard, Shell) line: 244
CredentialsPrompter$1.run() line: 44
UILockListener.doPendingWork() line: 162
UISynchronizer$3.run() line: 154
RunnableLock.run() line: 35
UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 135
Display.runAsyncMessages(boolean) line: 3794
Display.readAndDispatch() line: 3433
PartRenderingEngine$4.run() line: 1127
Realm.runWithDefault(Realm, Runnable) line: 337
PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 1018
E4Workbench.createAndRunUI(MApplicationElement) line: 156
Workbench$5.run() line: 694
Realm.runWithDefault(Realm, Runnable) line: 337
Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 606
PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 150
IDEApplication.start(IApplicationContext) line: 139
EclipseAppHandle.run(Object) line: 196
EclipseAppLauncher.runApplication(Object) line: 134
EclipseAppLauncher.start(Object) line: 104
EclipseStarter.run(Object) line: 380
EclipseStarter.run(String[], Runnable) line: 235
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native
method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 483
Main.invokeFramework(String[], URL[]) line: 669
Main.basicRun(String[]) line: 608
Main.run(String[]) line: 1515
Main.main(String[]) line: 1488
{code}
* Waiting for the UI thread: OpenShiftExplorerContentProvider is getting the children for
the (very same connection instance), reaches out to the OpenShiftProjectCache, acquires
the lock to it (was 1st in getting out to the cache). The cache then misses the entries
and thus asks the connection to request them. The connection is not authenticated yet,
tries to prompt the user and therefore tries to acquire the UI thread.
{code:title=*holds* OpenShiftProjectCache lock, *waits* for UI thread lock}
OpenShiftExplorerContentProvider#getChildrenFor > OpenShiftProjectCache#getProjectsFor
> Connection#getResources > CredentialsPrompter#promptAndAuthenticate
{code}
{code}
Thread [Worker-9] (Suspended)
owns: OpenShiftProjectCache (id=376)
waiting for: Semaphore (id=1542)
Object.wait(long) line: not available [native method]
Semaphore.acquire(long) line: 43
UISynchronizer.syncExec(Runnable) line: 164
Display.syncExec(Runnable) line: 4633
CredentialsPrompter.promptAndAuthenticate(IConnection, Object) line: 33
LazyCredentialsPrompter.promptAndAuthenticate(IConnection, Object) line: 30
Connection.authorize() line: 233
Connection.connect() line: 206
Connection.retryList(String, OpenShiftException, String) line: 424
Connection.getResources(String, String) line: 368
Connection.getResources(String) line: 355
OpenShiftProjectCache.getProjectsFor(IOpenShiftConnection) line: 56
OpenShiftExplorerContentProvider.getChildrenFor(Object) line: 95
BaseExplorerContentProvider$1.run(IProgressMonitor) line: 167
Worker.run() line: 55
{code}
was (Author: adietish):
I see 2 competing accesses to the UI thread that race with the lock for the
OpenShiftProjectCache:
* Current UI thread execution: Connection wizard is saving the connection that it
successfully authenticated and triggers an update in the OpenShiftProjectCache.
OpenShiftProjectCache#connectionChanged is waiting for the instance lock (synchronized
method)
{code}
{code:title=holds UI thread lock, waits for OpenShiftProjectCache lock}
CredentialsPrompter#promptAndAuthenticate > ConnectionWizardPage#saveConnection >
ConnectionsRegistry#update > OpenShiftProjectCache#connectionChanged
{code}
Thread [main] (Suspended)
owns: RunnableLock (id=519)
waiting for: OpenShiftProjectCache (id=376)
OpenShiftProjectCache.connectionChanged(IConnection, String, Object, Object) line: 80
ConnectionsRegistry.fireChange(IConnection, int, String, Object, Object) line: 165
ConnectionsRegistry.update(IConnection, IConnection) line: 295
ConnectionWizardPageModel.saveConnection() line: 456
ConnectionWizardPage.connect() line: 405
ConnectionWizard.performFinish() line: 46
WizardDialog.finishPressed() line: 799
WizardDialog.buttonPressed(int) line: 429
Dialog$2.widgetSelected(SelectionEvent) line: 619
TypedListener.handleEvent(Event) line: 248
EventTable.sendEvent(Event) line: 84
Display.sendEvent(EventTable, Event) line: 4481
Button(Widget).sendEvent(Event) line: 1329
Display.runDeferredEvents() line: 3819
Display.readAndDispatch() line: 3430
WizardDialog(Window).runEventLoop(Shell) line: 827
WizardDialog(Window).open() line: 803
WizardUtils.openWizardDialog(IWizard, Shell) line: 244
CredentialsPrompter$1.run() line: 44
UILockListener.doPendingWork() line: 162
UISynchronizer$3.run() line: 154
RunnableLock.run() line: 35
UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 135
Display.runAsyncMessages(boolean) line: 3794
Display.readAndDispatch() line: 3433
PartRenderingEngine$4.run() line: 1127
Realm.runWithDefault(Realm, Runnable) line: 337
PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 1018
E4Workbench.createAndRunUI(MApplicationElement) line: 156
Workbench$5.run() line: 694
Realm.runWithDefault(Realm, Runnable) line: 337
Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 606
PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 150
IDEApplication.start(IApplicationContext) line: 139
EclipseAppHandle.run(Object) line: 196
EclipseAppLauncher.runApplication(Object) line: 134
EclipseAppLauncher.start(Object) line: 104
EclipseStarter.run(Object) line: 380
EclipseStarter.run(String[], Runnable) line: 235
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native
method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 483
Main.invokeFramework(String[], URL[]) line: 669
Main.basicRun(String[]) line: 608
Main.run(String[]) line: 1515
Main.main(String[]) line: 1488
{code}
* Waiting for the UI thread: OpenShiftExplorerContentProvider is getting the children for
the (very same connection instance), reaches out to the OpenShiftProjectCache, acquires
the lock to it (was 1st in getting out to the cache). The cache then misses the entries
and thus asks the connection to request them. The connection is not authenticated yet,
tries to prompt the user and therefore tries to acquire the UI thread.
{code:title=holds OpenShiftProjectCache lock, waits for UI thread lock}
OpenShiftExplorerContentProvider#getChildrenFor > OpenShiftProjectCache#getProjectsFor
> Connection#getResources > CredentialsPrompter#promptAndAuthenticate
{code}
{code}
Thread [Worker-9] (Suspended)
owns: OpenShiftProjectCache (id=376)
waiting for: Semaphore (id=1542)
Object.wait(long) line: not available [native method]
Semaphore.acquire(long) line: 43
UISynchronizer.syncExec(Runnable) line: 164
Display.syncExec(Runnable) line: 4633
CredentialsPrompter.promptAndAuthenticate(IConnection, Object) line: 33
LazyCredentialsPrompter.promptAndAuthenticate(IConnection, Object) line: 30
Connection.authorize() line: 233
Connection.connect() line: 206
Connection.retryList(String, OpenShiftException, String) line: 424
Connection.getResources(String, String) line: 368
Connection.getResources(String) line: 355
OpenShiftProjectCache.getProjectsFor(IOpenShiftConnection) line: 56
OpenShiftExplorerContentProvider.getChildrenFor(Object) line: 95
BaseExplorerContentProvider$1.run(IProgressMonitor) line: 167
Worker.run() line: 55
{code}
Eclipse freeze when trying to reconnect to an existing connection
-----------------------------------------------------------------
Key: JBIDE-21686
URL:
https://issues.jboss.org/browse/JBIDE-21686
Project: Tools (JBoss Tools)
Issue Type: Bug
Components: openshift
Affects Versions: 4.3.1.CR1
Environment:
Reporter: Marián Labuda
Priority: Critical
Labels: connection, openshift_v3
Fix For: 4.3.1.CR1
On nightly build of OpenShift tooling when I am trying to reconnect to an existing
connection, whole IDE freeze. E.g. after restart of eclipse and token to server has not
been stored in secure storage, I am prompted to enter token when trying to do anything
with an existing OS3 connection and upon entering a token and hitting Finish button, IDE
freeze and after a while its not responding.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)