Bug 392179 - My application that works fine in eclipse 3.6 and 3.7 "freezes" in Eclipse 4.2.1
Summary: My application that works fine in eclipse 3.6 and 3.7 "freezes" in Eclipse 4.2.1
Status: CLOSED WONTFIX
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.2.1   Edit
Hardware: PC Windows 7
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: Platform UI Triaged CLA
QA Contact:
URL:
Whiteboard: stalebug
Keywords: helpwanted
Depends on:
Blocks:
 
Reported: 2012-10-17 10:38 EDT by Gabriele CLA
Modified: 2020-04-22 05:53 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Gabriele CLA 2012-10-17 10:38:01 EDT
Hi, I have an application that works fine in eclipse 3.6 and 3.7 but freezes in Eclipse 4.2.1

The problem is that application "freeze" when executes 
PlatformUI's createAndRunWorkbench method.
My custom code:

Display vDisplay = PlatformUI.createDisplay();
WorkbenchAdvisor vWorkbenchAdvisor = new ABSBuildWorkbenchAdvisor();
PlatformUI.createAndRunWorkbench(vDisplay, vWorkbenchAdvisor);
Here other java statements of my application


After a deep debug, I've see that the problem is at line 588 of Workbench class:
// run the e4 event loop and instantiate ... well, stuff
e4Workbench.createAndRunUI(e4Workbench.getApplication());

During debug I've see that createAndRunUI never ends its execution.
My application continues its execution only when I close manually the Eclipse's gui that seems to be "freezed".

In eclipse 3.6 and eclipse 3.7 my application continues its run without that I have to close manually to Eclipse's gui.


Here all thread's dump take using visualvm:

2012-10-17 16:25:04

"Attach Listener" - Thread t@5
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Bundle File Closer" - Thread t@20
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <2ee28063> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

   Locked ownable synchronizers:
	- None

"Finalizer" - Thread t@3
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <18ada729> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

   Locked ownable synchronizers:
	- None

"Framework Active Thread" - Thread t@14
   java.lang.Thread.State: TIMED_WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <76737f58> (a org.eclipse.osgi.framework.internal.core.Framework)
	at org.eclipse.osgi.framework.internal.core.Framework.run(Framework.java:1862)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None

"Framework Event Dispatcher" - Thread t@17
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <185afba1> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

   Locked ownable synchronizers:
	- None

"JMX server connection timeout 36" - Thread t@36
   java.lang.Thread.State: TIMED_WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <592c34b> (a [I)
	at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None

"Provisioning Event Dispatcher" - Thread t@26
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <5fd0f0db> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

   Locked ownable synchronizers:
	- None

"RMI Scheduler(0)" - Thread t@35
   java.lang.Thread.State: TIMED_WAITING
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for <665373c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
	at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None

"RMI TCP Accept-0" - Thread t@12
   java.lang.Thread.State: RUNNABLE
	at java.net.PlainSocketImpl.socketAccept(Native Method)
	at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
	- locked <106a15d> (a java.net.SocksSocketImpl)
	at java.net.ServerSocket.implAccept(ServerSocket.java:462)
	at java.net.ServerSocket.accept(ServerSocket.java:430)
	at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
	at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
	at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None

"RMI TCP Connection(1)-172.20.40.81" - Thread t@34
   java.lang.Thread.State: RUNNABLE
	at sun.management.ThreadImpl.dumpThreads0(Native Method)
	at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:427)
	at sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:167)
	at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:96)
	at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:33)
	at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
	at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
	at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:262)
	at javax.management.StandardMBean.invoke(StandardMBean.java:391)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427)
	at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
	at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- locked <5e35512c> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"Reference Handler" - Thread t@2
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <30b98167> (a java.lang.ref.Reference$Lock)
	at java.lang.Object.wait(Object.java:485)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)

   Locked ownable synchronizers:
	- None

"Signal Dispatcher" - Thread t@4
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Start Level Event Dispatcher" - Thread t@19
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <54eb840f> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

   Locked ownable synchronizers:
	- None

"Thread-4" - Thread t@33
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <70d683f3> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
	at org.tmatesoft.svn.core.javahl.SVNClientImplTracker.run(SVNClientImplTracker.java:65)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None

"Worker-1" - Thread t@27
   java.lang.Thread.State: TIMED_WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <13710065> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

   Locked ownable synchronizers:
	- None

"Worker-2" - Thread t@30
   java.lang.Thread.State: TIMED_WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <13710065> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

   Locked ownable synchronizers:
	- None

"Worker-JM" - Thread t@24
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <e74eb02> (a java.util.ArrayList)
	at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:58)

   Locked ownable synchronizers:
	- None

"[ThreadPool Manager] - Idle Thread" - Thread t@38
   java.lang.Thread.State: WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <29ed4306> (a org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:106)

   Locked ownable synchronizers:
	- None

"[Timer] - Main Queue Handler" - Thread t@23
   java.lang.Thread.State: TIMED_WAITING
	at java.lang.Object.wait(Native Method)
	- waiting on <1df0d7b8> (a java.lang.Object)
	at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:141)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None

"main" - Thread t@1
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)
	at org.eclipse.swt.widgets.Display.sleep(Display.java:4656)
	at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:364)
	at org.eclipse.ui.internal.Workbench$3.eventLoopIdle(Workbench.java:462)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1033)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:923)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at abscmd.ABSBuildApp.start(ABSBuildApp.java:73)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

   Locked ownable synchronizers:
	- None
Comment 1 Paul Webster CLA 2012-10-17 10:49:33 EDT
createAndRunWorkbench(*) should run until the GUI is closed.

Do you mean there's something in ABSBuildWorkbenchAdvisor that should cause it to exit right away?

PW
Comment 2 Gabriele CLA 2012-10-17 11:44:05 EDT
Hi Paul.

My application contains these statements:
Display vDisplay = PlatformUI.createDisplay();
WorkbenchAdvisor vWorkbenchAdvisor = new ABSBuildWorkbenchAdvisor();
PlatformUI.createAndRunWorkbench(vDisplay, vWorkbenchAdvisor);
java statement 1
java statement 2
...
java statement n

Using eclipse 3.6 and 3.7 my application continues its run; that means  that are executed also java statement1, 2 ...n without closing manually the GUI.
That's for me is fine.

Using eclipse 4.2.1 is necessary to close the gui to see that java statement 1,2 .... n are executed.
Without closing manually the gui the execution is freezed in PlatformUI.createAndRunWorkbench method.
That's for me is a bug because is changed the behavior.

Two word about my system:
I have developed a java code generator that generates the java code starting from some .xml files.
My generator is used in two different ways:
1) By an Eclipse plugin : during the day developers use this plugin to generate the code, in other words: the plugin uses the generator.
This In Eclipse 4.2.1 works fine.
2) As an Eclipse application: this is useful only to have the "nightly builds".
A scheduled process during the night starts the application to generate the
code of all users. The application uses the same generator used by Plugin to generate the code.
Point 2 works fine in Eclipse 3.6 and 3.7, but freezes in 4.2.1 during
PlatformUI.createAndRunWorkbench method call.

Regards
Comment 3 Paul Webster CLA 2012-10-17 11:48:19 EDT
Yes, I need to understand what part of your application requires createAndRunWorkbench(*) to exit.  It won't by itself.  That's why I asked about ABSBuildWorkbenchAdvisor

PW
Comment 4 Gabriele CLA 2012-10-17 12:00:46 EDT
The generator requires createAndRunWorkbench to exit.
Note that the generator is not a part of the application,
application has simply to invoke it to start the code generator.
Please, look my example and my explanation I have post before, 
I thinh that's rather clear.
Comment 5 Gabriele CLA 2012-10-17 12:09:57 EDT
Excuse me, I attach the Advisor code

public class ABSBuildWorkbenchAdvisor extends WorkbenchAdvisor
{
   public ABSBuildWorkbenchAdvisor()
   {
      super();
   }

   /*
    * (non-Javadoc)
    * 
    * @see org.eclipse.ui.application.WorkbenchAdvisor#openWindows()
    */
   @Override
   public boolean openWindows()
   {
      return false;
   }

   @Override
   public String getInitialWindowPerspectiveId()
   {
      return "absplugin.ABSPerspective";
   }
}
Comment 6 Paul Webster CLA 2012-10-17 12:40:13 EDT
We don't honour advisor.openWindows() in org.eclipse.ui.internal.Workbench.init() any more, and we need a way to propagate a false to the Eclipse4 event loop

PW
Comment 7 Gabriele CLA 2013-05-07 04:45:35 EDT
Hi, why this bug is still opened?
A part of our plugin does not works without your fix and so we can not move our
customers to use Eclipse 4.x.

Please, consider to fix this problem, if very important for us.
Comment 8 Paul Webster CLA 2013-05-08 07:59:28 EDT
No one is looking at this at the moment, but I'd consider a contribution:

http://wiki.eclipse.org/Platform_UI/How_to_Contribute

PW
Comment 9 Eclipse Genie CLA 2020-04-22 05:53:57 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. As such, we're closing this bug.

If you have further information on the current state of the bug, please add it and reopen this bug. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.