Marco: thank you for this. A few weeks ago when I was trying to find the "lock" problem I saw this method but I did not dare to change it; and just as you said I been using OminBase with no problem, but never runned the Garbage Collector, Surely I was going to have a bigger problem in the future for not running the garbageCollect.
I have just update this method on my project and tried both the garbageCollect and the reorganize method , both worked fine (win 7 32bits, later I am going to test on Win 10 64 bits). Thanks again. Matías. ________________________________ De: Pharo-users <pharo-users-boun...@lists.pharo.org> en nombre de marco <ma...@omeleon.de> Enviado: miércoles, 25 de julio de 2018 10:23 a. m. Para: pharo-users@lists.pharo.org Asunto: Re: [Pharo-users] OmniBase for Pharo 6 One serious problem left: OmniBaseTest>>testGC fails. Have a look at the 2 methods /ODBContainer>>lockDataFile "Dec, 2010 sas: this code was relying in evaluating a block that was happening only in win32 but not in *nix. So now I'm making it wait for the lock and then execute the code normally because it seems the intention was the same." | currentSpace defaultSpace | activeDataFile waitForAddingLock. currentSpace := activeDataFile == dataFileA ifTrue: [0] ifFalse: [1]. defaultSpace := objectManager defaultObjectSpace. currentSpace == defaultSpace ifFalse: [defaultSpace == 0 ifTrue: [dataFileA isNil ifTrue: [dataFileA := ODBObjectStorage openOn: self dataFileNameA]. activeDataFile := dataFileA] ifFalse: [dataFileB isNil ifTrue: [dataFileB := ODBObjectStorage openOn: self dataFileNameB]. activeDataFile := dataFileB]. ^self lockDataFile] ODBFile>>waitForLockAt: pos length: length whileWaitingDo: aBlock "Wait for lock at given position. Evaluate aBlock in each iteration." "Dec, 2010. sas: evaluating code in each iteration while waiting sounds weird but whatever. I think this was designed on the wrong assumption that the OS always will provide a false in the first try but what actually happens is that in win32 you always will get at least one false but in *nixes you don't do see that happening (which is totally reasonable). BEWARE of stupid code relying on this stupid assumption (I've already patched #lockDataFile because of this)." | startTime currentTime | (stream lockAt: pos length: length) ifFalse: [ startTime := Time totalSeconds. [stream lockAt: pos length: length] whileFalse: [ aBlock value. currentTime := Time totalSeconds. currentTime - startTime < self timeOutLength ifFalse: [ ODBLockNotification signal ifTrue: [startTime := currentTime] ifFalse: [^ODBCannotLock signal]]]] / So "sas" did a refactoring in 2010 because he/she thought it is stupid code. This code change breaks the GarbageCollection of Omnibase. I reverted the first method to the original code of the Omnibase author, David Gorisek: /lockDataFile | currentSpace defaultSpace | activeDataFile waitForAddingLockWhileWaitingDo: [currentSpace := activeDataFile == dataFileA ifTrue: [0] ifFalse: [1]. defaultSpace := objectManager defaultObjectSpace. currentSpace == defaultSpace ifFalse: [defaultSpace == 0 ifTrue: [dataFileA isNil ifTrue: [dataFileA := ODBObjectStorage openOn: self dataFileNameA]. activeDataFile := dataFileA] ifFalse: [dataFileB isNil ifTrue: [dataFileB := ODBObjectStorage openOn: self dataFileNameB]. activeDataFile := dataFileB]. ^self lockDataFile]] / I removed the comment of "sas" from the second method. It is wrong. The garbage collection works again and the test is green. GC is an important feature of Omnibase. It creates a new repository/database file and copies the data into the new file, compressing the data. It keeps your database compact and clean. If you don't run it (frequently) your db files keep on growing... Matias, your fixes are absolutely valid and should be published - together with the one above - in Esteban's repository. -- Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html Smalltalk - Pharo Smalltalk Users | Mailing List Archive<http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html> forum.world.st Pharo Smalltalk Users forum and mailing list archive. Pharo User Forum