Hi Bert,
On Sep 1, 2014, at 4:31 AM, Bert Freudenberg bert@freudenbergs.de wrote:
On 31.08.2014, at 09:50, Nicolas Cellier nicolas.cellier.aka.nice@gmail.com wrote:
2014-08-30 15:31 GMT+02:00 Bernhard Pieber bernhard@pieber.com:
During processing of update-eem.287.mcm a popup menu appears saying that the Squeak4.5-13680.changes file does not exist. This is incorrect because the file exists. When I choose Debug I get FileDoesNotExistException. See the attached PNG and SqueakDebug.log.
It happens to me from time to time. I suspect that there are two many files opened before the reclamation facility has a chance to work. I suspect the read-only copy of change file to open those files.
Yep. I noticed that on my SqueakJS VM (which does not yet support weak refs/finalization), in a Squeak 4.5 image the sources and changes files are opened many many times but never closed (I'm refcounting the handles).
I suspect a strategically placed #close after we're done with the read-only copy would solve this problem for good.
Even with finalization support it's a good idea to actually close files when you're done, because it's unpredictable when the finalizer will actually run.
Another thought is that given the abundance of memory these days, we might cache both sources and changes in main memory (which would also speed up full-text searches).
Pharo is planning to eliminate them altogether which is more coherent than caching them. But IMO the solution is easy, maintain a *single* read-only copy of the sources and changes files in SourceFilesArray (or whatever the class is called; I'm on my phone) and read source through them instead of reopen ing the damn things all the time. Then the file's own buffers will provide done caching. Annoying that I write this code in 2008 for newspeak but we still rely on the mad "run the GC to finalize files when open fails" approach.
- Bert -
Eliot phone