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.