On Tue, 9 Nov 2010, Igor Stasenko wrote:

snip


No, you can't. I feel sorry for you :)

A #useSession:during: using ensure, and of course it will work
correctly, because you not accessing session via
process-specific storage. This is illustrated by my "good fork" example.

Erm, no. In both of your examples the session wasn't aquired by the forked process. It was available via a variable. If you aquire the session _in_ the forked process _from_ the session store, then the #ensure: block in the session store will be able to retrieve it.


now replace #doSomething with this:

[ 1 year asDelay wait ] ensure: [
 self assert:  (Processor activeProcess environmentAt: #session) notNil ]

and then terminate a process which running your fork.

Replaced (in theory) and terminated. What will happen? This assertion in this #ensure: block will fail, but the session will be retrieved properly by the session store's unwind block.

So you can use process local variables, but you shouldn't access them during unwinding (#ensure:, #ifCurtailed:, whatever). This is possible as I showed it in my example.


In attachment you'll find a test, which shows the problem (i using
tests from Pharo image).

The test fails, because you're accessing a process local variable in an unwind block, which you shouldn't do.


Levente




Levente


snip





--
Best regards,
Igor Stasenko AKA sig.


Reply via email to