On Sun, Oct 10, 2010 at 10:09 AM, Pavel Krivanek <[email protected]>wrote:
> > > On Fri, Oct 8, 2010 at 7:40 PM, Igor Stasenko <[email protected]> wrote: > >> 2010/10/8 Pavel Krivanek <[email protected]>: >> > >> > >> > On Fri, Oct 8, 2010 at 7:15 PM, Pavel Krivanek < >> [email protected]> >> > wrote: >> >> >> >> >> >> On Fri, Oct 8, 2010 at 5:06 PM, Igor Stasenko <[email protected]> >> wrote: >> >>> >> >>> 2010/10/8 Pavel Krivanek <[email protected]>: >> >>> > Hi Marcus, >> >>> > is that really all what happened between 12172 and 12186? >> >>> > >> >>> > update12186 >> >>> > Issue 3071: fixing timestamp tests >> >>> > Issue 3068: Non portable SmalltalkImage>>platformName >> >>> > deprecationWarning >> >>> > Issue 3063: removing explain >> >>> > Issue 3039: There should not be any configuration on Core >> >>> > It doesn't explain the problems with VM versions and in 12186 I >> cannot >> >>> > build >> >>> > the PharoKernel (it hangs without error in unload phase) >> >>> > -- Pavel >> >>> > >> >>> please , tell me if it keep hanging after you doing: >> >>> >> >>> WeakArray restartFinalizationProcess. >> >>> >> >>> it seems like a deadlock with WeakArray's FinalizationLock or >> >>> FinalizationSemaphore. >> >> >> >> it hangs for me... >> >> -- Pavel >> > >> > with the MCMethodDefinition>>shutdown hack it work well >> >> so, at least we know what causing it. >> >> Now i wonder, what may cause that >> WeakArray classPool at: #FinalizationLock >> get locked by some other process and not released anymore? >> >> > if I replace critical:ifError: by critical:ifLocked: in WeakArray >> > removeWeakDependent:, it shows that it is really locked. I can reproduce it > everytime. Any idea how can I determine who locked it? > > -- Pavel > It collides with HostSystemMenusProxy class >> unregister this is the call stack: [caught := true. self wait. blockValue := mutuallyExcludedBlock value] in Semaphore>>critical: BlockClosure>>ensure: Semaphore>>critical: Semaphore>>critical:ifError: WeakRegistry>>protected: WeakRegistry>>remove:ifAbsent: HostSystemMenusProxy class>>unregister: HostSystemMenusProxy>>unregister HostSystemMenusProxy>>destroyEveryThing [self destroyEveryThing] in HostSystemMenusProxy>>finalize BlockClosure>>on:do: BlockClosure>>ifError: HostSystemMenusProxy>>finalize WeakFinalizerItem>>finalizeValues [:finItem | finItem finalizeValues] in [valueDictionary expiredValuesDo: [:finItem | finItem finalizeValues]] in WeakRegistry>>finalizeValues WeakIdentityKeyDictionary(WeakKeyDictionary)>>expiredValuesDo: [valueDictionary expiredValuesDo: [:finItem | finItem finalizeValues]] in WeakRegistry>>finalizeValues [mutuallyExcludedBlock value] in [blockValue := [mutuallyExcludedBlock value] ifError: [:msg :rcvr | hasError := true. errMsg := msg. errRcvr := rcvr]] in Semaphore>>critical:ifError: BlockClosure>>on:do: BlockClosure>>ifError: [blockValue := [mutuallyExcludedBlock value] ifError: [:msg :rcvr | hasError := true. errMsg := msg. errRcvr := rcvr]] in Semaphore>>critical:ifError: [caught := true. self wait. blockValue := mutuallyExcludedBlock value] in Semaphore>>critical: BlockClosure>>ensure: Semaphore>>critical: Semaphore>>critical:ifError: WeakRegistry>>protected: WeakRegistry>>finalizeValues [:weakDependent | weakDependent ifNotNil: [weakDependent finalizeValues]] in [WeakFinalizationList checkTestPair. FinalizationDependents do: [:weakDependent | weakDependent ifNotNil: [weakDependent finalizeValues]]] in WeakArray class>>finalizationProcess WeakArray(SequenceableCollection)>>do: [WeakFinalizationList checkTestPair. FinalizationDependents do: [:weakDependent | weakDependent ifNotNil: [weakDependent finalizeValues]]] in WeakArray class>>finalizationProcess [mutuallyExcludedBlock value] in [blockValue := [mutuallyExcludedBlock value] ifError: [:msg :rcvr | hasError := true. errMsg := msg. errRcvr := rcvr]] in Semaphore>>critical:ifError: BlockClosure>>on:do: BlockClosure>>ifError: [blockValue := [mutuallyExcludedBlock value] ifError: [:msg :rcvr | hasError := true. errMsg := msg. errRcvr := rcvr]] in Semaphore>>critical:ifError: [caught := true. self wait. blockValue := mutuallyExcludedBlock value] in Semaphore>>critical: BlockClosure>>ensure: Semaphore>>critical: Semaphore>>critical:ifError: WeakArray class>>finalizationProcess [self finalizationProcess] in WeakArray class>>restartFinalizationProcess [self value. Processor terminateActive] in BlockClosure>>newProcess -- Pavel
_______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
