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

Levente Uzonyi leves at caesar.elte.hu
Fri Feb 7 09:52:03 UTC 2020


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.

Levente

> - 		SecurityManager default hasFileAccess ifTrue:[
> - 			changesFile close.
> - 			changesFile open: changesFile name forWrite: true].
> - 		changesFile setToEnd.
> - 	].
> - !


More information about the Squeak-dev mailing list