On Mon, 8 Nov 2010, Igor Stasenko wrote:
Hello,
i just found that Squeak images Process class contains unused ivars:
island env
IIRC those were added by Matthew Fulmer to support ProcessSpecific _and_
Cobalt. The idea is that the two can be used together this way, because
the definition of Process doesn't have to be changed.
in Pharo image, env ivar is used for holding a process-specific state,
which is convenient, so one could use:
Processor activeProcess environmentAt: put:...
but in Squeak image there is even no such methods.
So they integrated the full ProcessSpecific package. Is it a problem that
you have to load it into Squeak?
Levente
There are also some caveats with such thing:
during process termination, Processor activeProcess could point to
different process,
and so, accessing to process environment may lead to error(s).
To avoid issues like these, the process termination action (stack
unwinding) should be always performed only for active process.
One of a trick i think, is to replace the suspendedContext with own
context, and then activate given process in order to unwind its stack
etc.
Another way is to remember environment somewhere else during process
termination, and use different method to access it i.e. instead of:
Processor activeProcess environmentAt:
use
self processEnvironmentAt:
where #processEnvironmentAt: is implemented in Object class, and can
handle termination gracefully.
But i think replacing suspendedContext is more generic.
What you think?
--
Best regards,
Igor Stasenko AKA sig.