This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 178960 - MetaInfServicesLookup's ThreadPoolExecutor prevents JVM shutdown
Summary: MetaInfServicesLookup's ThreadPoolExecutor prevents JVM shutdown
Status: RESOLVED FIXED
Alias: None
Product: platform
Classification: Unclassified
Component: Lookup (show other bugs)
Version: 6.x
Hardware: All All
: P1 normal (vote)
Assignee: Jaroslav Tulach
URL:
Keywords: REGRESSION
Depends on:
Blocks:
 
Reported: 2009-12-22 03:15 UTC by Alexey Vladykin
Modified: 2009-12-23 02:19 UTC (History)
1 user (show)

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey Vladykin 2009-12-22 03:15:51 UTC
This started yesterday.

$ NBDIST=/export/home/av202691/cnd-main/nbbuild/netbeans ./suite.sh 
Copying NetBeans to /var/tmp/av202691/modeltests/netbeans-copy...
    /export/home/av202691/cnd-main/nbbuild/netbeans/cnd3
    /export/home/av202691/cnd-main/nbbuild/netbeans/ide12
    /export/home/av202691/cnd-main/nbbuild/netbeans/platform11...
Done

Then it hangs. Nothing else is printed.
There is an idle java process in memory:

$ ps -ef | grep java
av202691 25688 25668 99 13:08 pts/2    00:00:03 /usr/lib/jvm//sun-jdk-1.6/bin/java -enableassertions -cp :/var/tmp/av202691/modeltests/netbeans-copy/ide12/modules/org-netbeans-modules-projectuiapi.jar:/var/tmp/av202691/modeltests/netbeans-copy/ide12/modules/org-netbeans-modules-projectapi.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/lib/org-openide-util.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/lib/org-openide-util-lookup.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/modules/org-openide-nodes.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/core/org-openide-filesystems.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/modules/org-openide-loaders.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/lib/org-openide-modules.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/lib/boot.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/core/core.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/modules/org-netbeans-api-progress.jar:/var/tmp/av202691/modeltests/netbeans-copy/platform11/modules/org-netbeans-modules-queries.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-api-model.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-modelimpl.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-antlr.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-api-project.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-apt.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-repository-api.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-repository.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-utils.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-model-services.jar:/var/tmp/av202691/modeltests/netbeans-copy/cnd3/modules/org-netbeans-modules-cnd-modelutil.jar -Dparser.report.errors=true -Dcnd.cache.skip.save=true -Dcnd.repository.cache.path=/var/tmp/av202691-modeltests-repository-caches org.netbeans.modules.cnd.modelimpl.trace.TraceModel -mp src/adler32.c.ppp


Its thread dump (note that pool-1-thread-1 is WAITING, but it's not a daemon):

$ jstack 25688
2009-12-22 13:11:28
Full thread dump Java HotSpot(TM) 64-Bit Server VM (14.3-b01 mixed mode):

"Attach Listener" daemon prio=10 tid=0x0000000040cd6000 nid=0x64a3 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"DestroyJavaVM" prio=10 tid=0x00007fa9f02fc800 nid=0x645c waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"TimerQueue" daemon prio=10 tid=0x00007fa9f0298000 nid=0x647b in Object.wait() [0x00007fa9f4171000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00007faa28149ba8> (a javax.swing.TimerQueue)
	at javax.swing.TimerQueue.run(TimerQueue.java:232)
	- locked <0x00007faa28149ba8> (a javax.swing.TimerQueue)
	at java.lang.Thread.run(Thread.java:619)

"AWT-XAWT" daemon prio=10 tid=0x00007fa9f01bf000 nid=0x646d runnable [0x00007fa9f4f24000]
   java.lang.Thread.State: RUNNABLE
	at sun.awt.X11.XToolkit.waitForEvents(Native Method)
	at sun.awt.X11.XToolkit.run(XToolkit.java:548)
	at sun.awt.X11.XToolkit.run(XToolkit.java:523)
	at java.lang.Thread.run(Thread.java:619)

"Java2D Disposer" daemon prio=10 tid=0x00007fa9f0105800 nid=0x646c in Object.wait() [0x00007fa9f57fd000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00007faa282bf710> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
	- locked <0x00007faa282bf710> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
	at sun.java2d.Disposer.run(Disposer.java:125)
	at java.lang.Thread.run(Thread.java:619)

"pool-1-thread-1" prio=10 tid=0x00007fa9f0120000 nid=0x646b waiting on condition [0x00007fa9f6bbc000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00007faa28127ad0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
	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:619)

"Active Reference Queue Daemon" daemon prio=10 tid=0x00007fa9f010d000 nid=0x646a in Object.wait() [0x00007fa9f6cbd000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00007faa280a2060> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
	- locked <0x00007faa280a2060> (a java.lang.ref.ReferenceQueue$Lock)
	at org.netbeans.modules.openide.util.ActiveQueue.run(ActiveQueue.java:53)
	at java.lang.Thread.run(Thread.java:619)

"Timer-0" daemon prio=10 tid=0x00007fa9f00a9800 nid=0x6469 in Object.wait() [0x00007fa9f6dbe000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00007faa2829be00> (a java.util.TaskQueue)
	at java.lang.Object.wait(Object.java:485)
	at java.util.TimerThread.mainLoop(Timer.java:483)
	- locked <0x00007faa2829be00> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:462)

"Low Memory Detector" daemon prio=10 tid=0x00007fa9f0078800 nid=0x6467 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread1" daemon prio=10 tid=0x00007fa9f0075000 nid=0x6466 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x00007fa9f0073000 nid=0x6465 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x00007fa9f0071000 nid=0x6464 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x00007fa9f0053800 nid=0x6463 in Object.wait() [0x00007fa9f772f000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00007fa9fd7af2c0> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
	- locked <0x00007fa9fd7af2c0> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00007fa9f0052000 nid=0x6462 in Object.wait() [0x00007fa9f7830000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00007fa9fd7af2f8> (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 <0x00007fa9fd7af2f8> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x00007fa9f004b000 nid=0x6461 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000040ce0000 nid=0x645d runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000040ce2000 nid=0x645e runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000040ce3800 nid=0x645f runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000040ce5800 nid=0x6460 runnable 

"VM Periodic Task Thread" prio=10 tid=0x00007fa9f007b000 nid=0x6468 waiting on condition 

JNI global references: 1134
Comment 1 Alexey Vladykin 2009-12-22 03:16:40 UTC
Happens in our incremental build on Solaris, and I can also reproduce it locally on my Linux box.
Comment 2 Alexey Vladykin 2009-12-22 05:32:40 UTC
This ThreadPoolExecutor is created by org.openide.util.lookup.MetaInfServicesLookup. It is a consequence of http://hg.netbeans.org/cnd-main/rev/2449f7d7922d recently integrated into trunk. Reverting back to RequestProcessor fixes the hang.

Test case to reproduce the problem:
export NBDIST=/export/home/av202691/cnd-main/nbbuild/netbeans && java -enableassertions -cp $NBDIST/ide12/modules/org-netbeans-modules-projectuiapi.jar:$NBDIST/ide12/modules/org-netbeans-modules-projectapi.jar:$NBDIST/platform11/lib/org-openide-util.jar:$NBDIST/platform11/lib/org-openide-util-lookup.jar:$NBDIST/platform11/modules/org-openide-nodes.jar:$NBDIST/platform11/core/org-openide-filesystems.jar:$NBDIST/platform11/modules/org-openide-loaders.jar:$NBDIST/platform11/lib/org-openide-modules.jar:$NBDIST/platform11/lib/boot.jar:$NBDIST/platform11/core/core.jar:$NBDIST/platform11/modules/org-netbeans-api-progress.jar:$NBDIST/platform11/modules/org-netbeans-modules-queries.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-api-model.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-modelimpl.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-antlr.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-api-project.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-apt.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-repository-api.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-repository.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-utils.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-model-services.jar:$NBDIST/cnd3/modules/org-netbeans-modules-cnd-modelutil.jar org.netbeans.modules.cnd.modelimpl.trace.TraceModel -mp PATH_TO_ANY_EXISTING_CPP_FILE
Comment 3 Jaroslav Tulach 2009-12-22 13:29:16 UTC
I guess that for reasons of compatibility it is better if the MetaInfLookup continues to use the RequestProcessor, if it is available.
Comment 4 Jaroslav Tulach 2009-12-22 13:58:25 UTC
core-main#b887bda918ff
Comment 5 Quality Engineering 2009-12-22 23:42:10 UTC
Integrated into 'main-golden', will be available in build *200912230201* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)
Changeset: http://hg.netbeans.org/main/rev/b887bda918ff
User: Jaroslav Tulach <jtulach@netbeans.org>
Log: #178960: Continuing to reuse RequestProcessor, if it is around
Comment 6 Vladimir Voskresensky 2009-12-23 02:19:52 UTC
Thanks!