[squeak-dev] The Inbox: System-ct.1136.mcz

David T. Lewis lewis at mail.msen.com
Fri Feb 7 16:25:24 UTC 2020


On Fri, Feb 07, 2020 at 10:52:03AM +0100, Levente Uzonyi wrote:
> On Thu, 6 Feb 2020, commits at source.squeak.org wrote:
> 
> >Christoph Thiede uploaded a new version of System to project The Inbox:
> >http://source.squeak.org/inbox/System-ct.1136.mcz
> >
> >==================== Summary ====================
> >
> >Name: System-ct.1136
> >Author: ct
> >Time: 6 February 2020, 7:50:02.954648 pm
> >UUID: 0a637557-d32d-9347-bc4b-4f2bb95a707d
> >Ancestors: System-cmm.1131
> >
> >Make Smalltalk more robust against interruptions/timeouts during sources 
> >compilation
> >
> >A popular example is a test case that compiles a lot of methods and then 
> >is terminated via timeout. See [1] for an example. This commit ensures 
> >that the changes file does not remain closed when the method is curtailed.
> >
> >Before probably destroyed your image, now works:
> >
> >	[MCSnapshotResource mockPackage unload]
> >		valueWithin: 1 seconds "you may need to adapt the limit to 
> >		reproduce"
> >		onTimeout: [].
> >
> >[1] 
> >http://forum.world.st/BUG-MultiByteFileStream-Object-gt-gt-error-primGetPosition-failed-td5111181.html
> >
> >=============== Diff against System-cmm.1131 ===============
> >
> >Item was changed:
> > ----- Method: SmalltalkImage>>forceChangesToDisk (in category 'sources, 
> > changes log') -----
> > forceChangesToDisk
> > 	"Ensure that the changes file has been fully written to disk by 
> > 	closing and re-opening it. This makes the system more robust in the 
> > 	face of a power failure or hard-reboot."
> >
> > 	| changesFile |
> > 	changesFile := SourceFiles at: 2.
> > 	(changesFile isKindOf: FileStream) ifTrue: [
> > 		changesFile flush.
> >+ 		SecurityManager default hasFileAccess ifTrue: [
> >+ 			[changesFile close] ensure: [
> >+ 				changesFile open: changesFile name forWrite: 
> >true]].
> >+ 		changesFile setToEnd].!
> 
> I don't think today's operating systems write changes to disk if you 
> reopen the file.
> #sync is probably the right method here, though it may slow things 
> down based on how often #forceChangesToDisk is sent.
> 

Better to try it with flush rather than sync. On Windows, sqFileSync() just
calls sqFileFlush(() anyway, and the flush does FlushFileBuffers().

Dave



More information about the Squeak-dev mailing list