[Pharo-project] 12186 image quit problem

Schwab,Wilhelm K bschwab at anest.ufl.edu
Sun Oct 10 10:40:21 EDT 2010


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: pharo-project-bounces at lists.gforge.inria.fr [pharo-project-bounces at lists.gforge.inria.fr] On Behalf Of Igor Stasenko [siguctua at gmail.com]
Sent: Sunday, October 10, 2010 7:56 AM
To: Pharo-project at 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 at lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project




More information about the Pharo-dev mailing list