[squeak-dev] Re: Process-specific state broken and uncomplete

Andreas Raab andreas.raab at gmx.de
Mon Nov 8 22:05:51 UTC 2010


On 11/8/2010 1:22 PM, Igor Stasenko wrote:
> Currently such example will work only in Pharo, and only if ensure
> block evaluated within same active process (which is not, if you
> terminating this process from other process).

Well, then don't write code like that :-) Seriously, your code example 
seems broken. First, in the case of:

[
  " init session here "
[ ... do something ... ] ensure: [ self session close]
] fork

it will function correctly since your session is initialized *within* 
the fork not outside of it, thus Processor activeProcess is the child 
process, not the parent process. But even if we leave that out, I'd 
expect your code to read, e.g.,

  " init session here "
forkedSession := self session.
[
self session: forkedSession.
[ ... do something ... ] ensure: [ self session close]
] fork

So I'd say that the fault is solely in your code.

FWIW, the only realistic alternative that I could see is if the TLS 
either implements some sort of inheritance for the environment lookup 
(i.e., look up locally and if locally undefined traverse through parent 
processes) or copies all the variables into a newly forked process. Both 
approaches raise some very nasty concurrency issues which is why I 
prefer the simple (non-)solution we have today. A bug like in the code 
above is easy to find and to fix as it is completely reproducible. 
Contrary to which concurrent access to the environment dicitionary is 
not, and even if it is serialized you still need to make sure the access 
to the contents is serialized as well.

Cheers,
   - Andreas



More information about the Squeak-dev mailing list