[squeak-dev] Re: Caching MultiByteFileStream bug?

Levente Uzonyi leves at elte.hu
Wed Mar 31 12:06:56 UTC 2010


On Tue, 30 Mar 2010, Andreas Raab wrote:

> On 3/30/2010 7:40 PM, Levente Uzonyi wrote:
>> I uploaded two packages to the Inbox which contain the workaround for
>> the #atEnd issue.
>> 
>> (Installer repository: 'http://source.squeak.org/inbox')
>> install: 'Files-ul.80.mcz';
>> install: 'Multilingual-ul.118.mcz'
>> 
>> The tests are green, but there may be untested edge cases (probably not,
>> but who knows). Please review it.
>
> You're the expert. I kinda would to see this issue fixed but since it doesn't 
> appear to be a regression I would be equally okay to live with the issue in 
> 4.1 and postpone fixing it to 4.2 with lots more time to test the change. 
> It's a question of risk and how certain you feel about it. Your call.

I'm pretty sure they work as expected, but I'll write a few unit tests 
before pushing to the Trunk.


Levente

>
> Cheers,
>  - Andreas
>
>
>> On Tue, 30 Mar 2010, Levente Uzonyi wrote:
>> 
>>> On Mon, 29 Mar 2010, Andreas Raab wrote:
>>> 
>>>> Hi Levente -
>>>> 
>>>> Could you check the failure of
>>>> FileStreamTest>>testNextChunkOutOfBounds? This looks like it might be
>>>> a problem with caching file stream behavior. If it's not (i.e., the
>>>> infinite recursion is the 'expected' behavior) can we add something
>>>> that addresses the issue?
>>> 
>>> Seems like #primAtEnd: doesn't answer true if position is out of
>>> bounds and there are no more bytes to read:
>>> 
>>> FileStream forceNewFileNamed: 'testFileStreamAtEnd' do: [ :file |
>>> file position: 1000.
>>> self assert: file next isNil.
>>> self assert: file atEnd ].
>>> 
>>> Read buffering doesn't affect this behavior:
>>> 
>>> FileStream forceNewFileNamed: 'testFileStreamAtEnd' do: [ :file |
>>> file disableReadBuffering.
>>> file position: 1000.
>>> self assert: file next isNil.
>>> self assert: file atEnd ].
>>> 
>>> Really:
>>> 
>>> FileStream forceNewFileNamed: 'testFileStreamAtEnd' do: [ :file |
>>> | fileID buffer1 count |
>>> file disableReadBuffering.
>>> file position: 1000.
>>> fileID := file instVarNamed: #fileID.
>>> buffer1 := String new: 1.
>>> count := file primRead: fileID into: buffer1 startingAt: 1 count: 1.
>>> self assert: count = 0.
>>> self assert: (file primAtEnd: fileID) ].
>>> 
>>> We can work around this issue with StandardFileStream >> #upTo: and
>>> friends (by replacing the old code which uses recursion and is pretty
>>> inefficient btw), but I think #atEnd should answer true in this case.
>>> 
>>> 
>>> Levente
>>> 
>>>> 
>>>> Thanks,
>>>> - Andreas
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
>
>
>



More information about the Squeak-dev mailing list