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.

Bill


________________________________________
From: [email protected] 
[[email protected]] On Behalf Of Igor Stasenko 
[[email protected]]
Sent: Sunday, October 10, 2010 7:56 AM
To: [email protected]
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
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to