Changes by: Jason J. Hickey (jyh at cs.caltech.edu)
Date: 2007-10-30 12:47:54 -0700 (Tue, 30 Oct 2007)
Revision: 12456
Log message:
I believe I have solved the problem with bogus termination on Windows XP.
See the message titled "Parallel builds on windows xp" from Doug Rabson on
Aug 9, 2007.
I *can't* reproduce the problem, but I have an explanation.
If correct, the problem was a double-allocation in omake_shell_sys.c:handle_wait,
where
1. tuple = alloc_tuple(2);
2. Field(tuple, 0) = ...
3. Field(tuple, 1) = Val_unit;
4. status = alloc_small(...)
5. Field(tuple, 1) = status;
Line 5 violates the assignment policy, which says that direct
assignment is allowed only if the tuple was just allocated.
So, the explanation would be that a GC happens at line 4, moving the
tuple to the major heap, and the assignment on line 5 violates the
generational invariant (by not keeping track of the old->young pointer).
This leads to heap corruption, and the result looks like "process stopped",
only because the stopped case is the last one in pattern matching,
so it serves as the default.
It seems reasonable at least.
Changes | Path(relative to omake-branches/0.9.8.x/src/clib) |
+4 -6 | omake_shell_sys.c |