Updates:
Cc: marcus.denker
Comment #4 on issue 3498 by marianopeck: remove:ifAbsent: in linked list
leads to interruption/sync problems
http://code.google.com/p/pharo/issues/detail?id=3498
Stef, I am not Adrian, but yes, I think that can be the reasons. Just take
the example of Andreas. When you do foo == nil, when that's compiled, it
put a special bytcode for the == primitive (no method is send).
It seems the scheduler can change processes during method sends. In most
clases, this may not be a problem. But if you cahnge foo == nil, by foo
isNil, it may be a point where it can be preempted. And maybe there are
places where this cannot happen, probably the place where the the processes
are managed or the code needed for that, like Andras said, process, delay,
semaphore, etc.
What I don't understand is that I thought that the compiler replaces foo
isNil by foo == nil. And if this is the case, then what has been explained
doesn't make sense :(