On 10 October 2010 17:40, Schwab,Wilhelm K <bschwab@anest.ufl.edu> wrote:
Sig,
Have you thought about using a Mutex? Â Maybe I'm missing something in life, but long ago I decided the #forMutualExclusion is *beyond* private. Â Semaphores are wonderful for #wait/#signal. Â But for #critical:, I use Mutex which won't deadlock a thread with itself.
yes, i thought about it. It wont help in this situation, because if you start modifying dictionary inside a loop, which scanning its elements (like #do:) you'll have very unpleasant results. All HostSystemMenusProxy doing during #finalize is removing itself from weakregistry (which is complete nonsense, since weak registry cleaning itself from dead stuff anyways). So, self protected: [ valueDictionary expiredValuesDo: [:finItem | finItem finalizeValues ]. ]. actually triggers a bug/mistake in HostSystemMenusProxy , which leads to deadlock. :)
Bill
________________________________________ From: pharo-project-bounces@lists.gforge.inria.fr [pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Igor Stasenko [siguctua@gmail.com] Sent: Sunday, October 10, 2010 7:56 AM To: Pharo-project@lists.gforge.inria.fr Subject: Re: [Pharo-project] 12186 image quit problem
OKay, now i see what the problem:
<weak registry protected> Â <finalize items> Â Â Â <HostSystemMenusProxy>>finalize> Â Â Â Â Â Â .... Â Â Â Â Â Â <HostSystemMenusProxy class>>unregister> Â Â Â Â Â Â Â <weak registry protected>
In my WeakRegistry, a #finalize message sent while registry semaphore locked, so, in case if object in #finalize trying to manipulate with registry then it going to deadlock.
Then following piece:
WeakRegistry>>finalizeValues
self protected: [     valueDictionary expiredValuesDo: [:finItem |         finItem finalizeValues  ].  ].
should be rewritten as:
| expired | expired := OrderedCollection new. self protected: [ Â Â Â Â valueDictionary expiredValuesDo: [:finItem | expired add: finItem ] Â ]. expired do: #finalizeValues.
But either way, HostSystemMenusProxy should not attempt remove itself from registry during #finalize (and causing a deadlock), since its pointless.
-- Best regards, Igor Stasenko AKA sig.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Best regards, Igor Stasenko AKA sig.