[squeak-dev] The Trunk: System-cmm.725.mcz
Levente Uzonyi
leves at elte.hu
Tue Apr 28 22:00:41 UTC 2015
If there's an error signaled from aBlock, and the default error handler is
activated (see UnhandledError >> #defaultAction), then the process will be
suspended (see Debugger class >> #morphicOpenOn:context:label:contents:fullView:)
while it's inside the AccessLock mutex's critical section.
The (new) UI process will try to display a debugger. To do that, it will
try to read the values of various preferences, but the suspended process
is holding the mutex, so it'll wait forever.
This results in an image lockup, because using Alt+. (Cmd+. on mac) will
also try to open a debugger.
This is why aBlock must be evaluated outside of the AccessLock mutex's
critical section.
To reproduce the error, just evaluate this expression (but keep in mind
that your image will not be able to respond anymore):
Preferences preferenceAt: #'no such preference' ifAbsent: [ self error ]
Levente
On Tue, 28 Apr 2015, Chris Muller wrote:
> Wait, the newer one has a non-local return in it, but
> Mutext>>#critical: has an ensure: in it anyway, so maybe I don't see
> the problem..?
>
> On Tue, Apr 28, 2015 at 2:43 PM, Chris Muller <asqueaker at gmail.com> wrote:
>>> The above change restores the old behavior of locking up the image, so it
>>> should be reverted. An additional comment explaininng why aBlock must not be
>>> evaluated inside the argument of #accessDictionaryOfPreferencesIn: would be
>>> helpful.
>>
>> Ahh, because aBlock might have a non-local return in it, leaving the
>> Mutex unsignaled (and critical unenterable), is that right?
>>
>> Took me a minute to see that problem.
>>
>> Okay, I'll revert that method if no one else does by my next commit..
>>
>>> It would be even better to finally get rid of DictionaryOfPreferences.
>>>
>>>
>>> Levente
>>>
>
>
More information about the Squeak-dev
mailing list
|