[squeak-dev] Re: UI lockup in Squeak 4.1

Rob Withers reefedjib at yahoo.com
Tue Jul 13 18:42:11 UTC 2010


--------------------------------------------------
From: "Rob Withers" <reefedjib at yahoo.com>
Sent: Tuesday, July 13, 2010 12:34 PM
To: "The general-purpose Squeak developers list" 
<squeak-dev at lists.squeakfoundation.org>
Subject: Re: [squeak-dev] Re: UI lockup in Squeak 4.1

> --------------------------------------------------
> From: "Andreas Raab" <andreas.raab at gmx.de>
> Sent: Tuesday, July 13, 2010 12:03 PM
> To: "The general-purpose Squeak developers list" 
> <squeak-dev at lists.squeakfoundation.org>
> Subject: [squeak-dev] Re: UI lockup in Squeak 4.1
>
>> On 7/13/2010 8:57 AM, Rob Withers wrote:
>>
>>> This time it was a Cog VM which spasmed, which I use for my client
>>> (Squeak 4.1 for server for use with linux vm - I have no ability to
>>> compile a linux Cog vm: would love if someone posted one that could be
>>> launched headless for my webhost).
>>>
>>> It started running at 100% and I did your F2 -> Debug Options -> Print
>>> all processes. It started dumping a LOT to the Debug Console, then it
>>> froze, still at 100%, but no increase in memory now and it went (Not
>>> Responding) and greyed out the window.
>>>
>>> Luckily, I was able to see enough of the stack that was causing
>>> problems. It is infinitely looping in this method:
>>>
>>> LanguageEnvironment class>>#localeID: localeID
>>> ^self knownEnvironments at: localeID ifAbsent: [self localeID: (LocaleID
>>> isoLanguage: 'en')]
>>>
>>> This has nothing to do with my code, except I must be calling something
>>> that enters this loop. It happens in both Cog (Windows) and Squeak4.1
>>> (Linux <headless> and Windows).
>>>
>>> Not sure how to fix this.
>>
>> Debugging 101: Add a "self halt' in LanguageEnvironment and take it from 
>> there :-)
>
> :-)  Ok, Things worked for awhile, then it started looping.  I found that 
> most of the registered environments, in KnownEnvironments, are now nil. 
> This includes all Environments except for 'el' -> GreekEnvironment, 
> 'ja-etoys' -> JapaneseEnvironment, 'ca' -> Latin1Environment and 'sq' -> 
> Latin1Environment.
>
> Not sure why.
>

I start the server and client with all known environments.  At some later 
point in time, some of the environments change to nil and I start looping 
through the absent block of the dictionary lookup for localID:.

It is not a #become situation, since we still have some Latin1Environment 
entries, and more than the Latin1Environment entries are changed to nil.

There is only 2 references to LanguageEnvironment class>>#KnownEnvironments, 
which are LanguageEnvironment class>>#knownEnvironments and 
LanguageEnvironment class>>#resetKnownEnvironments.

There is only one sender of LanguageEnvironment class>>#knownEnvironments, 
which is LanguageEnvironment class>>#localeID:
There are two senders of LanguageEnvironment class>>#resetKnownEnvironments, 
which are 
NaturalLanguageTranslator>>#loadForLocaleIsoString:fromGzippedMimeLiteral: 
and NaturalLanguageTranslator>>#mergeTranslationFileNamed:.

I have three images: echat1.image (a client), echat2.image (another client) 
and echat-server.image.  I set 'self halt' in the absent block of #localeID: 
and in #resetKnownEnvironments in all images.   I run the server and the 2 
clients, connect the clients to the server and each other and then sit 
there.   #KnownEnvironments have the correct environments.  At some later 
time I try to copy text and #localID: self halt in the absent block gets 
called.  #KnownEnvironments in that image now have nils. 
#resetKnownEnvironments never gets called.


I am totally stumped.

Rob

>>
>> Cheers,
>>   - Andreas
>>
> 



More information about the Squeak-dev mailing list