Summary: | testRefreshZombie(frysk.proc.TestRefresh)junit.framework.AssertionFailedError: event loop run explictly stopped (waiting for ack) | ||
---|---|---|---|
Product: | frysk | Reporter: | Andrew Cagney <cagney> |
Component: | general | Assignee: | Unassigned <frysk-bugzilla> |
Status: | NEW --- | ||
Severity: | normal | CC: | woodzltc |
Priority: | P1 | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | ||
Bug Depends on: | 2430, 2431, 2432 | ||
Bug Blocks: | 2081 |
Description
Andrew Cagney
2006-02-19 19:30:57 UTC
- stracing TestRunner makes the problem go away - enabling logging makes the problem go away - on a mono-processor, this rarely happens - on an smp, this always always happens With SMP, after a fork(), both the parent and child will run free and in parallel. On a mono-processor, only one will run -> strongly suggests some sort of race condition. The other possability is that the child is being hit by a signal while it is trying to find it's feet. The system call sequence is: vfork -> fork -> exec. This is from just adding print statements: Running testRefreshZombie(frysk.proc.TestRefresh) ...zombie test started program /home/cagney/native/frysk-core/frysk/pkglibexecdir/funit-child v 24952 pid 24953 status 0x0 child pid 24953 zombie created FAIL junit.framework.AssertionFailedError: event loop run explictly stopped (waiting for ack) <<program ..>> was printed by frysk.sys.Fork.spawn just before the exec call, which strongly suggests that the call sequence (vfork -> fork -> exec) succeeded, but the final exec killed the entire process. Index: frysk-imports/tests/ChangeLog 2006-02-23 Andrew Cagney <cagney@redhat.com> * Makefile.am (vfork_exec_vfork_exec_SOURCES, noinst_PROGRAMS) (TESTS): Add vfork-exec/vfork-exec.c. * vfork-exec/vfork-exec.c: New test. Index: frysk-core/frysk/proc/ChangeLog This detects the problem, and cleans up the mess; it doesn't yet fix it. 2006-03-07 Andrew Cagney <cagney@redhat.com> * TestLib.java: Check for still pending signals. Index: frysk-sys/frysk/sys/ChangeLog 2006-03-07 Andrew Cagney <cagney@redhat.com> * Poll.java (poll): Add description. * SigSet.java, cni/SigSet.cxx: Change all void methods to return this SigSet. 2006-03-06 Andrew Cagney <cagney@redhat.com> * SigSet.java (getPending, suspend, blockProcMask) (unblockProcMask, setProcMask, getProcMask): Add. * cni/SigSet.cxx: Ditto. * TestSigSet.java (testProcMask): New test. * cni/SigSet.hxx, cni/SigSet.cxx, SigSet.java, TestSigSet.java: New files. This fixes TestRefresh where there was a possibly dangling signal: Index: frysk-core/frysk/proc/ChangeLog 2006-03-07 Andrew Cagney <cagney@redhat.com> * TestRefresh.java (testExitLoosesChild): Replace testExitLoosesAllChildren, only create one child process. Remaining cases of dangling signals turned into separate bugs. |