cagney@towns$ while true ; do ./TestRunner frysk.proc.TestTaskObserverBlocked ; done Running testGetBlockers(frysk.proc.TestTaskObserverBlocked) ...PASS Running testBlockedCloneUnblockChildFirst(frysk.proc.TestTaskObserverBlocked) ...PASS Running testBlockedCloneUnblockParentFirst(frysk.proc.TestTaskObserverBlocked) ...PASS Running testBlockedForkUnblockChildFirst(frysk.proc.TestTaskObserverBlocked) ...PASS Running testBlockedForkUnblockParentFirst(frysk.proc.TestTaskObserverBlocked) ...PASS Running testRefreshAfterUnblockedForkExits(frysk.proc.TestTaskObserverBlocked) ...PASS Running testAddObserverAfterUnblock(frysk.proc.TestTaskObserverBlocked) ...PASS Running testBlockingFibonacciClone(frysk.proc.TestTaskObserverBlocked) ...ERROR java.util.ConcurrentModificationException Running testBlockingFibonacciFork(frysk.proc.TestTaskObserverBlocked) ...ERROR java.lang.NullPointerException Running testUnblockRunning(frysk.proc.TestTaskObserverBlocked) ...
Just these two tests: Running testBlockingFibonacciClone(frysk.proc.TestTaskObserverBlocked) ...ERROR java.util.ConcurrentModificationException Running testUnblockRunning(frysk.proc.TestTaskObserverBlocked) ... triggers the hang.
The test testBlockingFibonacciClone(frysk.proc.TestTaskObserverBlocked)'s tear down was failing - the java.util.ConcurrentModificationException - leaving a process with the main TID dead but all the children still attached. That would cascade through to the next successful test which would then hang waiting for the remaining tasks to exit. The fix eliminates the ConcurrentModificationException making tearDown more robust. Index: frysk-core/frysk/proc/ChangeLog 2006-11-26 Andrew Cagney <cagney@redhat.com> * TestLib.java (tidsToKillDuringTearDown): Rename children. (capturedSendTkill): Rename capturedSendKill. (tearDown): When scanning for stray TIDs, iterate over a copy of tidsToKillDuringTearDown.