Error: Instances of StrikeFont are not indexable

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
21 messages Options
12
bpi
Reply | Threaded
Open this post in threaded view
|

Error: Instances of StrikeFont are not indexable

bpi
Dear Squeakers,

I did the following:
1. I opened the latest trunk image Squeak4.2-10779-alpha.image with the Mac OS X VM Squeak 5.8b12.
2. Update Squeak.
3. Run all tests. After all the tests I get a debugger with "Error: Instances of StrikeFont are not indexable"

--- The full stack ---
StrikeFont(Object)>>error:
StrikeFont(Object)>>errorNotIndexable
StrikeFont(Object)>>size
StrikeFont(Object)>>basicAt:put:
StrikeFont(Object)>>instVarAt:put:
StrikeFont(Object)>>readDataFrom:size:
ReferenceStream(DataStream)>>readInstance
ReferenceStream(DataStream)>>next
ReferenceStream>>next
ReferenceStream(DataStream)>>readArray
ReferenceStream(DataStream)>>next
ReferenceStream>>next
[] in StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName:
[] in [] in MultiByteBinaryOrTextStream(PositionableStream)>>untilEndWithFork:displayingProgress:
BlockClosure>>ensure:
[] in MultiByteBinaryOrTextStream(PositionableStream)>>untilEndWithFork:displayingProgress:
[] in BlockClosure>>newProcess

Is there a way find out where this process is created? Tracing senders of StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName: leads ultimately to no senders. In a Process Browser I do not see anything unusual.

Cheers,
Bernhard
Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Andreas.Raab
This might be the result of a fileIn (possibly one of the
LanguageEnvironment tests). You can try two things:
1) Check your recent changes if anything got logged. A fileIn from
loading a project file or so should be logged.
2) Insert a "self halt" into the method (before the fork) to see where
it comes from.

Cheers,
   - Andreas

On 1/8/2011 11:47 AM, Bernhard Pieber wrote:

> Dear Squeakers,
>
> I did the following:
> 1. I opened the latest trunk image Squeak4.2-10779-alpha.image with the Mac OS X VM Squeak 5.8b12.
> 2. Update Squeak.
> 3. Run all tests. After all the tests I get a debugger with "Error: Instances of StrikeFont are not indexable"
>
> --- The full stack ---
> StrikeFont(Object)>>error:
> StrikeFont(Object)>>errorNotIndexable
> StrikeFont(Object)>>size
> StrikeFont(Object)>>basicAt:put:
> StrikeFont(Object)>>instVarAt:put:
> StrikeFont(Object)>>readDataFrom:size:
> ReferenceStream(DataStream)>>readInstance
> ReferenceStream(DataStream)>>next
> ReferenceStream>>next
> ReferenceStream(DataStream)>>readArray
> ReferenceStream(DataStream)>>next
> ReferenceStream>>next
> [] in StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName:
> [] in [] in MultiByteBinaryOrTextStream(PositionableStream)>>untilEndWithFork:displayingProgress:
> BlockClosure>>ensure:
> [] in MultiByteBinaryOrTextStream(PositionableStream)>>untilEndWithFork:displayingProgress:
> [] in BlockClosure>>newProcess
>
> Is there a way find out where this process is created? Tracing senders of StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName: leads ultimately to no senders. In a Process Browser I do not see anything unusual.
>
> Cheers,
> Bernhard
>


bpi
Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

bpi
Hi Andreas,

Thanks for the tips. Inserting self halt shows that it is called from the preamble of FontJapaneseEnvironment.sar by the SARInstaller. Where that is called from I have yet to figure out. Strangely my image hung after proceeding from the halt. Alt+. does not work.

- Bernhard

Am 08.01.2011 um 12:02 schrieb Andreas Raab:
> This might be the result of a fileIn (possibly one of the LanguageEnvironment tests). You can try two things:
> 1) Check your recent changes if anything got logged. A fileIn from loading a project file or so should be logged.
> 2) Insert a "self halt" into the method (before the fork) to see where it comes from.
> On 1/8/2011 11:47 AM, Bernhard Pieber wrote:
>> I did the following:
>> 1. I opened the latest trunk image Squeak4.2-10779-alpha.image with the Mac OS X VM Squeak 5.8b12.
>> 2. Update Squeak.
>> 3. Run all tests. After all the tests I get a debugger with "Error: Instances of StrikeFont are not indexable"
>>
snip
>> Is there a way find out where this process is created? Tracing senders of StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName: leads ultimately to no senders. In a Process Browser I do not see anything unusual.
>>
>> Cheers,
>> Bernhard
>>
>
>


bpi
Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

bpi
It is the LocaleTest. When I run it all the tests are green but the debugger appears. I have a FontJapaneseEnvironment.sar in the folder where my image resides. I have no idea where I got that from. When I remove it and run the LocaleTest the debugger does not appear.

Cheers,
- Bernhard

Am 08.01.2011 um 15:27 schrieb Bernhard Pieber:

> Hi Andreas,
>
> Thanks for the tips. Inserting self halt shows that it is called from the preamble of FontJapaneseEnvironment.sar by the SARInstaller. Where that is called from I have yet to figure out. Strangely my image hung after proceeding from the halt. Alt+. does not work.
>
> Am 08.01.2011 um 12:02 schrieb Andreas Raab:
>> This might be the result of a fileIn (possibly one of the LanguageEnvironment tests). You can try two things:
>> 1) Check your recent changes if anything got logged. A fileIn from loading a project file or so should be logged.
>> 2) Insert a "self halt" into the method (before the fork) to see where it comes from.
>> On 1/8/2011 11:47 AM, Bernhard Pieber wrote:
>>> I did the following:
>>> 1. I opened the latest trunk image Squeak4.2-10779-alpha.image with the Mac OS X VM Squeak 5.8b12.
>>> 2. Update Squeak.
>>> 3. Run all tests. After all the tests I get a debugger with "Error: Instances of StrikeFont are not indexable"
>>>
> snip
>>> Is there a way find out where this process is created? Tracing senders of StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName: leads ultimately to no senders. In a Process Browser I do not see anything unusual.


Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Chris Muller-3
I have the same issue, and the file has mysteriously appeared in my
image directory.  Usually you can Shift+Command+e to see references to
substrings in the code, but doing that for FontJapaneseEnvironment.sar
does not produce any results.  Strange indeed..!

On Sat, Jan 8, 2011 at 8:56 AM, Bernhard Pieber <[hidden email]> wrote:

> It is the LocaleTest. When I run it all the tests are green but the debugger appears. I have a FontJapaneseEnvironment.sar in the folder where my image resides. I have no idea where I got that from. When I remove it and run the LocaleTest the debugger does not appear.
>
> Cheers,
> - Bernhard
>
> Am 08.01.2011 um 15:27 schrieb Bernhard Pieber:
>> Hi Andreas,
>>
>> Thanks for the tips. Inserting self halt shows that it is called from the preamble of FontJapaneseEnvironment.sar by the SARInstaller. Where that is called from I have yet to figure out. Strangely my image hung after proceeding from the halt. Alt+. does not work.
>>
>> Am 08.01.2011 um 12:02 schrieb Andreas Raab:
>>> This might be the result of a fileIn (possibly one of the LanguageEnvironment tests). You can try two things:
>>> 1) Check your recent changes if anything got logged. A fileIn from loading a project file or so should be logged.
>>> 2) Insert a "self halt" into the method (before the fork) to see where it comes from.
>>> On 1/8/2011 11:47 AM, Bernhard Pieber wrote:
>>>> I did the following:
>>>> 1. I opened the latest trunk image Squeak4.2-10779-alpha.image with the Mac OS X VM Squeak 5.8b12.
>>>> 2. Update Squeak.
>>>> 3. Run all tests. After all the tests I get a debugger with "Error: Instances of StrikeFont are not indexable"
>>>>
>> snip
>>>> Is there a way find out where this process is created? Tracing senders of StrikeFontSet class>>installExternalFontOn:encoding:encodingName:textStyleName: leads ultimately to no senders. In a Process Browser I do not see anything unusual.
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Andreas Wacknitz
Am 08.01.11 23:37, schrieb Chris Muller:
> I have the same issue, and the file has mysteriously appeared in my
> image directory.  Usually you can Shift+Command+e to see references to
Regarding Shift+Command+e: you should try searching for 2010 with it :D

Regards,
Andreas

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Chris Muller-3
Ah, copyright notices.  Got it, thx.

On Sat, Jan 8, 2011 at 5:23 PM, Andreas Wacknitz <[hidden email]> wrote:
> Am 08.01.11 23:37, schrieb Chris Muller:
>> I have the same issue, and the file has mysteriously appeared in my
>> image directory.  Usually you can Shift+Command+e to see references to
> Regarding Shift+Command+e: you should try searching for 2010 with it :D
>
> Regards,
> Andreas
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Bert Freudenberg
In reply to this post by bpi
On 08.01.2011, at 15:56, Bernhard Pieber wrote:

> I have a FontJapaneseEnvironment.sar in the folder where my image resides. I have no idea where I got that from.

Fonts are downloaded automatically when you switch to a locale that requires it. You must have tried switching to Japanese at some point.

- Bert -


Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Frank Shearar
On 2011/01/10 11:18, Bert Freudenberg wrote:
> On 08.01.2011, at 15:56, Bernhard Pieber wrote:
>
>> I have a FontJapaneseEnvironment.sar in the folder where my image resides. I have no idea where I got that from.
>
> Fonts are downloaded automatically when you switch to a locale that requires it. You must have tried switching to Japanese at some point.

That would have been part of the tests, yes? Certainly I didn't
deliberately change locale, and ran into the same problem.

frank

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Levente Uzonyi-2
On Mon, 10 Jan 2011, Frank Shearar wrote:

> On 2011/01/10 11:18, Bert Freudenberg wrote:
>> On 08.01.2011, at 15:56, Bernhard Pieber wrote:
>>
>>> I have a FontJapaneseEnvironment.sar in the folder where my image resides.
>>> I have no idea where I got that from.
>>
>> Fonts are downloaded automatically when you switch to a locale that
>> requires it. You must have tried switching to Japanese at some point.
>
> That would have been part of the tests, yes? Certainly I didn't deliberately
> change locale, and ran into the same problem.

I guess LocaleTest does that.


Levente

>
> frank
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Chris Muller-3
Does anyone know how to fix this?  The suspect we have at this point
is LocaleTest>>#testLocaleChanged, which loads a Japanese file from...
somewhere which I can't tell, except there seems to be a problem with
the ReferenceStream that causes it to try to, when constructing a
StrikeFont, try to set beyond its 19th instance-variable..

Perhaps the class-structure changed, and/or the 'ja' file needs updating?

It would be nice not to have the debugger appear in a new 4.2 release
from running tests, and also a concern if there would be a problem
with the Japanese Locale, of course.

Thanks,
  Chris


On Mon, Jan 10, 2011 at 8:45 AM, Levente Uzonyi <[hidden email]> wrote:

> On Mon, 10 Jan 2011, Frank Shearar wrote:
>
>> On 2011/01/10 11:18, Bert Freudenberg wrote:
>>>
>>> On 08.01.2011, at 15:56, Bernhard Pieber wrote:
>>>
>>>> I have a FontJapaneseEnvironment.sar in the folder where my image
>>>> resides. I have no idea where I got that from.
>>>
>>> Fonts are downloaded automatically when you switch to a locale that
>>> requires it. You must have tried switching to Japanese at some point.
>>
>> That would have been part of the tests, yes? Certainly I didn't
>> deliberately change locale, and ran into the same problem.
>
> I guess LocaleTest does that.
>
>
> Levente
>
>>
>> frank
>>
>>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Levente Uzonyi-2
On Sun, 30 Jan 2011, Chris Muller wrote:

> Does anyone know how to fix this?  The suspect we have at this point
> is LocaleTest>>#testLocaleChanged, which loads a Japanese file from...
> somewhere which I can't tell, except there seems to be a problem with
> the ReferenceStream that causes it to try to, when constructing a
> StrikeFont, try to set beyond its 19th instance-variable..
>
> Perhaps the class-structure changed, and/or the 'ja' file needs updating?

StrikeFont changed. Nicolas removed the 20th variable (charIndex), because
it was unused. See
http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-December/156220.html

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Levente Uzonyi-2
On Mon, 31 Jan 2011, Levente Uzonyi wrote:

> On Sun, 30 Jan 2011, Chris Muller wrote:
>
>> Does anyone know how to fix this?  The suspect we have at this point
>> is LocaleTest>>#testLocaleChanged, which loads a Japanese file from...
>> somewhere which I can't tell, except there seems to be a problem with
>> the ReferenceStream that causes it to try to, when constructing a
>> StrikeFont, try to set beyond its 19th instance-variable..
>>
>> Perhaps the class-structure changed, and/or the 'ja' file needs updating?
>
> StrikeFont changed. Nicolas removed the 20th variable (charIndex), because it
> was unused. See
> http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-December/156220.html
>
>

I uploaded Tests-ul.114 which fixes LocaleTest >> #testIsFontAvailable.
Since it was an expected failure it wasn't easy to find out that it got
totally broken.
To make the test pass you have to add the charIndex variable back to
StrikeFont, otherwise the sar file won't load.
The other option is to fix the sar file...


Levente

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Nicolas Cellier
2011/1/31 Levente Uzonyi <[hidden email]>:

> On Mon, 31 Jan 2011, Levente Uzonyi wrote:
>
>> On Sun, 30 Jan 2011, Chris Muller wrote:
>>
>>> Does anyone know how to fix this?  The suspect we have at this point
>>> is LocaleTest>>#testLocaleChanged, which loads a Japanese file from...
>>> somewhere which I can't tell, except there seems to be a problem with
>>> the ReferenceStream that causes it to try to, when constructing a
>>> StrikeFont, try to set beyond its 19th instance-variable..
>>>
>>> Perhaps the class-structure changed, and/or the 'ja' file needs updating?
>>
>> StrikeFont changed. Nicolas removed the 20th variable (charIndex), because
>> it was unused. See
>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-December/156220.html
>>
>>
>
> I uploaded Tests-ul.114 which fixes LocaleTest >> #testIsFontAvailable.
> Since it was an expected failure it wasn't easy to find out that it got
> totally broken.
> To make the test pass you have to add the charIndex variable back to
> StrikeFont, otherwise the sar file won't load.
> The other option is to fix the sar file...
>
>
> Levente
>
>

I would say take the shortest path for a quick 4.2 release : revert the change.
Then, we'll have time to think about how to deal with those obsolete
binary dumps in 4.3.
Shouldn't a binary dump be restored in two pass ?
1) restore of exact structure (at time of dump) in temporary classes
2) mutation to current class sturcture (with ClassBuilder help)

Nicolas

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Nicolas Cellier
>
> I would say take the shortest path for a quick 4.2 release : revert the change.
> Then, we'll have time to think about how to deal with those obsolete
> binary dumps in 4.3.
> Shouldn't a binary dump be restored in two pass ?
> 1) restore of exact structure (at time of dump) in temporary classes
> 2) mutation to current class sturcture (with ClassBuilder help)
>
> Nicolas
>

OK, I just browsed it: StrikeFontSet are using ReferenceStream.
Didn't SmartRefStream were created for addressing this very problem ?

Nicolas

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Chris Muller-3
> OK, I just browsed it: StrikeFontSet are using ReferenceStream.
> Didn't SmartRefStream were created for addressing this very problem ?

That's my understanding.  But if the file was originally written as a
ReferenceStream, I think it will have to be re-written using a
SmartRefStream.

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Levente Uzonyi-2
On Mon, 31 Jan 2011, Chris Muller wrote:

>> OK, I just browsed it: StrikeFontSet are using ReferenceStream.
>> Didn't SmartRefStream were created for addressing this very problem ?
>
> That's my understanding.  But if the file was originally written as a
> ReferenceStream, I think it will have to be re-written using a
> SmartRefStream.
>
>

Will the file be updated or the change in the image reverted to solve
this problem?


Levente

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Chris Muller-3
The change was reverted right?  What was it, the 20th instVar was put back?

If I were in control of the file, I would redo the file and export it
as a SmartRefStream.  Alas, I have no idea even where it's being
downloaded from; senders lead nowhere.  This is some real "magic"
going on in LocaleTestCase, kicking off a background load??

On Wed, Feb 2, 2011 at 7:07 PM, Levente Uzonyi <[hidden email]> wrote:

> On Mon, 31 Jan 2011, Chris Muller wrote:
>
>>> OK, I just browsed it: StrikeFontSet are using ReferenceStream.
>>> Didn't SmartRefStream were created for addressing this very problem ?
>>
>> That's my understanding.  But if the file was originally written as a
>> ReferenceStream, I think it will have to be re-written using a
>> SmartRefStream.
>>
>>
>
> Will the file be updated or the change in the image reverted to solve this
> problem?
>
>
> Levente
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Levente Uzonyi-2
On Wed, 2 Feb 2011, Chris Muller wrote:

> The change was reverted right?  What was it, the 20th instVar was put back?

No, it's not reverted. And yes, the 20th instance variable, charIndex is
"missing".

>
> If I were in control of the file, I would redo the file and export it
> as a SmartRefStream.  Alas, I have no idea even where it's being
> downloaded from; senders lead nowhere.  This is some real "magic"
> going on in LocaleTestCase, kicking off a background load??

It's not magic. LanguageEnvironment >> #fontDownloadUrls contains the url
which is http://metatoys.org/pub/ . We can change it to point to
http://ftp.squeak.org if it's necessary. Something like
http://ftp.squeak.org/4.2/fonts/ or a variant based on SystemVersion is
fine IMHO.


Levente

>
> On Wed, Feb 2, 2011 at 7:07 PM, Levente Uzonyi <[hidden email]> wrote:
>> On Mon, 31 Jan 2011, Chris Muller wrote:
>>
>>>> OK, I just browsed it: StrikeFontSet are using ReferenceStream.
>>>> Didn't SmartRefStream were created for addressing this very problem ?
>>>
>>> That's my understanding.  But if the file was originally written as a
>>> ReferenceStream, I think it will have to be re-written using a
>>> SmartRefStream.
>>>
>>>
>>
>> Will the file be updated or the change in the image reverted to solve this
>> problem?
>>
>>
>> Levente
>>
>>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Error: Instances of StrikeFont are not indexable

Levente Uzonyi-2
In reply to this post by Chris Muller-3
On Wed, 2 Feb 2011, Chris Muller wrote:

> The change was reverted right?  What was it, the 20th instVar was put back?
>
> If I were in control of the file, I would redo the file and export it
> as a SmartRefStream.  Alas, I have no idea even where it's being
> downloaded from; senders lead nowhere.  This is some real "magic"
> going on in LocaleTestCase, kicking off a background load??

We should fix this issue ASAP. IMHO we should do the following:
- "freeze" the trunk one more time
- push a fix to the trunk which adds the missing instance variable
- create a new release candidate from the trunk (the release must be in
sync with the trunk)
- reopen the trunk
- the squeak42 repository's mcm should be replaced with a new version


Levente

>
> On Wed, Feb 2, 2011 at 7:07 PM, Levente Uzonyi <[hidden email]> wrote:
>> On Mon, 31 Jan 2011, Chris Muller wrote:
>>
>>>> OK, I just browsed it: StrikeFontSet are using ReferenceStream.
>>>> Didn't SmartRefStream were created for addressing this very problem ?
>>>
>>> That's my understanding.  But if the file was originally written as a
>>> ReferenceStream, I think it will have to be re-written using a
>>> SmartRefStream.
>>>
>>>
>>
>> Will the file be updated or the change in the image reverted to solve this
>> problem?
>>
>>
>> Levente
>>
>>
>
>

12