[squeak-dev] Re: [Vm-dev] Bug in writing compressed stream when saving an mcz (was: New Cog VMs available...)

David T. Lewis lewis at mail.msen.com
Sun Jul 13 13:55:41 UTC 2014


On Sun, Jul 06, 2014 at 12:47:25PM -0400, David T. Lewis wrote:
> On Sun, Jul 06, 2014 at 12:23:11PM -0400, David T. Lewis wrote:
> > On Sun, Jul 06, 2014 at 10:34:15AM +0200, Nicolas Cellier wrote:
> > > 2014-07-04 0:47 GMT+02:00 Nicolas Cellier <
> > > nicolas.cellier.aka.nice at gmail.com>:
> > > 
> > > >
> > > >
> > > >
> > > > 2014-07-04 0:09 GMT+02:00 Eliot Miranda <eliot.miranda at gmail.com>:
> > > >
> > > >
> > > >>
> > > >>
> > > >> On Thu, Jul 3, 2014 at 12:33 PM, Nicolas Cellier <
> > > >> nicolas.cellier.aka.nice at gmail.com> wrote:
> > > >>
> > > >>> The bug is repeatable, i simply have to execute this snippet with my
> > > >>> test file:
> > > >>>
> > > >>> (FileStream fileNamed: 'snapshot.bin') binary contentsOfEntireFile
> > > >>> asString zipped.
> > > >>>
> > > >>> The file is too big for an attachment here - 7.3 Mbytes - or 1.7 Mbytes
> > > >>> gzipped by external tool.
> > > >>> If someone can suggest an upload site, or want it by mail, just ask.
> > > >>>
> > > >>
> > > >> You're welcome to put it on ftp.mirandanamda.org, cogftpuser, pw cogging
> > > >> with 0's & 1's.
> > > >>
> > > >>
> > > > done, pollution of your site engaged...
> > > > Thanks Eliot!
> > > >
> > > >
> > > >>
> > > I inquired a bit more about this bug.
> > > An important clue is that it does not happen in Pharo3.0!
> > > 
> > > But Pharo3.0 did not fundamentally change compression
> > > (except some FileSystem related changes, separation of CRC stuff in another
> > > package, some other cosmetic changes like replacing some self assert: ...
> > > by [...] assert and a potential bug in
> > > DeflateStream>>nextPutAll:startingAt: introduced by CamilleTeruel).
> > > Squeak behavior is presumably not due to a Compression change.
> > > 
> > > Neither is it a VM problem, the bugs still shows up when running the Squeak
> > > image with Pharo VM.
> > > 
> > 
> > Yes, it is definite a problem in the Squeak trunk image.
> > 
> > 
> > > So the difference lies somewhere else: in our beloved Stream.
> > > I remembered a recent change of Eliot related to handling of Stream created
> > > with on:from:to: (Collections-eem.567).
> > > Reverting those changes just make the snippet pass!
> > > 
> > > Ah ah! At the time, i found the change of Eliot quite minimal and nice.
> > > But I wish I had time to analyze this small innocent change deeper.
> > > Indeed, I remembered I previously broke my teeth on this one 2 years or so
> > > ago, and preferred to adopt another strategy: avoid using on:from:to: and
> > > ReadWriteStream as much as possible.
> > > Why? because when analyzing the usage of inst.var. in Stream hierarchy, it
> > > gave me headaches, some subclass are just ignoring superclass variables, or
> > > worse are bending the semantics of superclass variables.
> > > I came to the conclusion that I could not decently master a change of
> > > on:from:to:
> > 
> > I can not confirm this. I have an image in which I can reliably reproduce the
> > failure in writing the MCZ to a file. I tried reverting the methods that were
> > introduced in Collections-eem.567 and I am still getting the same failure.
> > 
> > Dave
> 
> Oops, I spoke too soon. Indeed the problem appears as of Collections-eem.567,
> and does not appear in Collections-nice.566.
> 
> So I am confirming Nicolas' observations ... now to find the bug :)
> 
> Dave
>

This seems to be a rather tricky bug, and I don't think any of us knows the
cause right now. In case anyone else wants to have a look at it, here is a
recipe for reproducing the bug in a clean 4.5 image:

- Start with a clean Squeak 4.5 image in and empty working directory.
	ftp://ftp.squeak.org/4.5/Squeak4.5-13680.zip

- Open the image, do not update it.

- Open an MC browser and add the http://source.squeak.org/trunk repository for the Help-Squeak-Project package and Collections package.

- Load Help-Squeak-Project-kfr.18 from trunk.

- Load Collections-eem.567 from trunk.

- Open a browser on class SqueakToolsDebuggerHelp, and delete the class side method #showDebuggerMenuForm.

- Remove the http://source.squeak.org/trunk repository form the Help-Squeak-Project package in the MC browser.

- Highlight your package-cache repository and try to save Help-Squeak-project to the package-cache repository.

- Enter author initials 'dtl'.

- For the package comment, enter 'Remove unreferenced method'.

- Package save will fail part way through saving the MCZ.

- To reproduce the failure in this image, do the following in a workspace:

	mcv := MCVersion allInstances detect: [:e | e name = 'a MCVersion(Help-Squeak-Project-dtl.19)'].
	[f := FileStream fileNamed: 'junk.mcz'.
	mcv fileOutOn: f]
		ensure: [f close].

Dave
 


More information about the Squeak-dev mailing list