[squeak-dev] Reassessing the hack in WriteStream>>nextChunkPut:

Andreas Wacknitz A.Wacknitz at gmx.de
Sun Mar 8 21:39:32 UTC 2015


FWIW, Solaris 10 (SPARC), OpenSolaris (SPARC) and openindiana (x64) 
print the same as your Ubuntu installation does.

Regards,
Andreas

Am 08.03.15 21:38, schrieb David T. Lewis:
> On Sun, Mar 08, 2015 at 08:49:40PM +0100, Tobias Pape wrote:
>> On 08.03.2015, at 20:43, Levente Uzonyi <leves at elte.hu> wrote:
>>
>>> On Sun, 8 Mar 2015, Tobias Pape wrote:
>>>
>>>> Hi,
>>>>
>>>> thanks for taking the time to check!
>>>>
>>>>
>>>> On 08.03.2015, at 20:03, Levente Uzonyi <leves at elte.hu> wrote:
>>>>
>>>>> #flush is pretty costly, and IMO it's called way too often if it's in
>>>>> #nextChunkPut:. The most common workaround to avoid frequent calls is to use InMidstOfFileinNotification to check if it's a bulk write, and flush only once in those cases. For some reason this technique is not used in case of class comments.
>>>>> I changed the last lines of ClassDescription >> #classComment:stamp: in my image to
>>>>>
>>>>> 	self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp.
>>>>> 	InMidstOfFileinNotification signal ifFalse: [file flush].
>>>>> 	SystemChangeNotifier uniqueInstance classCommented: self.
>>>>>
>>>>> Then removed the #flush from WriteStream >> #nextChunkPut:, and it seems to me that the problem is gone.
>>>> Can you tell me whether the Changes file is read/written via one stream or two?
>>>> I understood its  two file descriptors but are these two in different streams or
>>>> the same stream?
>>> Of course, those are two (or more) different streams. We use SourceFiles at: 2 for writing and CurrentReadOnlySourceFiles at: 2 for reading.
>> Darn; if it had been a ReadWriteStream, one could say that we'd only really needed #flush when
>> we switch from writing to reading mode?.
>> So it is more elaborate.
>>
> I am attaching a small C program that shows the problem. This uses the
> same kind of fseek/ftell calls used in the VM FilePlugin. This confirms
> the different C runtime behaviour. On my Ubuntu system, an explicit
> flush is required, and on my SuSE box, no flush is required.
>
> Levente is probably right in saying that this is not an OS bug. It may
> just be different behaviour in different versions of libc.
>
> Dave
>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20150308/3b7fe0aa/attachment.htm


More information about the Squeak-dev mailing list