[Pharo-dev] Don't do this X(
thierry.goubier at cea.fr
Wed Apr 2 11:10:14 EDT 2014
Le 02/04/2014 16:33, phil at highoctane.be a écrit :
> On Wed, Apr 2, 2014 at 4:06 PM, Goubier Thierry <thierry.goubier at cea.fr
> <mailto:thierry.goubier at cea.fr>> wrote:
> Le 02/04/2014 15:59, Sebastian Sastre a écrit :
> Never save a “big" package using monticello (lets say ~2000 classes)
> and then save the image
> Because while you don’t have feedback of saving progress* it will be
> doing something on background (forked save?) and if for any
> reason you
> are tempted to do an image save or save and quit, it will save in a
> state that will prevent the image from opening again
> You have no option but to go to your previous image version or
> of the kind
> *saving a package actually provides /some/ feedback on progress
> but when
> the progress bar finishes, the saving doesn’t actually finish and it
> still have something going on, so you get "silence”
> (no-feedback) until
> you get the little monticello window with your new package version
> Does this mean that once we get the little window, we are safe?
> I am saving a package with containing a lot of Pack-XXX Pack-YYY
> Pack-ZZZ in a 2.0 image as a single Pack-PhilippeBack-nn.mcz thing.
> What is the moves to make to be safe?
> I already got my image locked at some points in a way that resembles
> what you describe.
I'm looking at the code and I don't understand everything, but, yes, it
seems there are a few ways to keep doing things while saving the package
(and maybe locking up things).
| newVersion waitForVersion |
waitForVersion := Semaphore new.
UIManager default defer: [
newVersion := workingCopy newVersionIn: aRepository.
waitForVersion signal ].
Processor activeProcess == UIManager default uiProcess
ifFalse: [ waitForVersion wait ].
newVersion ifNil: [ ^ self ].
Cursor wait showWhile: [[
storeVersion: newVersion in: aRepository;
storeDependencies: newVersion in: aRepository.]
ensure: [ (MCVersionInspector new version: newVersion) show ]]
It seems asynchronous, but I'm unsure of what it is doing. Progress bar
is only displayed when doing newVersionIn:, but this is sent to the
UIManager. And this is done in a fork (see saveVersion), so it's
probably allways possible to interrupt the thing half-way (or save).
Anybody to explain what is the objective when writing code like that?
> I'll profile that to see what's happening.
> Thierry Goubier
> CEA list
> Laboratoire des Fondations des Systèmes Temps Réel Embarqués
> 91191 Gif sur Yvette Cedex
> Phone/Fax: +33 (0) 1 69 08 32 92
> <tel:%2B33%20%280%29%201%2069%2008%2032%2092> / 83 95
Laboratoire des Fondations des Systèmes Temps Réel Embarqués
91191 Gif sur Yvette Cedex
Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95
More information about the Pharo-dev