[Pharo-project] Process-specific state broken and uncomplete
kustos at gmx.net
Tue Nov 9 14:34:00 EST 2010
On 09.11.2010 07:17, Igor Stasenko wrote:
> On 9 November 2010 08:06, Philippe Marschall <kustos at gmx.net> wrote:
>> On 08.11.2010 06:39, Igor Stasenko wrote:
>>> i just found that Squeak images Process class contains unused ivars:
>>> island env
>>> 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.
>>> 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
>>> 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:
>>> 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?
>> Not so convinced. Fast thread locals are important and a Symbol lookup
>> in an IdentityDictionary is pretty fast. And polluting Object with stuff
>> that doesn't belong there isn't a very convincing alternative to me.
> does that means that you prefer to replace suspendedContext?
I prefer to keep env. I can live with the current limitations. Process
termination is just so tricky (as other languages found out as well)
that it's IMHO better to simply avoid it (like finalization) instead of
coming up with some clever hacks to fix it.
VW for example has three or four methods to terminate a process.
More information about the Pharo-dev