See patch for http://code.google.com/p/pharo/issues/detail?id=786 in PharoInbox/SLICE-RemoteString-closeFile-nice.1 2009/5/1 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
After ScriptLoader loadOBAlpha problems, I'm now playing a bit with strace. very instructive.
strace build/squeak *.image `pwd`/loadOBAlpha.st > tmp.trace 2>&1
Notice a (SourceFiles at: 2) truncate: SmalltalkImage current lastQuitLogPosition. This is because repeated ScriptLoader loadOBAlpha are quickly spoiling the change log.
Tracing is really slow, especially with these unbuffered writes write(6, "^", 1) = 1 write(6, "s", 1) = 1 write(6, "e", 1) = 1 write(6, "l", 1) = 1 write(6, "f", 1) = 1 I remember Eliot noticed this easy potential speed-up already.
I noticed a bunch of try...catch style of open file at startup. grep ENOENT ../pharo0.1-10268dev09.04.1/tmp.trace | wc -l 4012 Most are plugin/library search and Freetype related. But a few search concern icons and wonderland... Some room for more etoys clean-up here?
On my linux box, I can now confirm the socket problem encountered by loadOBAlpha is really a (Too many open files) problem. Some @!*^# code is trying to open more than 1018 change log files which is a bit too much. Some file closing happens from time to time but very sparsely. This happens while loading Installer wiresong project: 'ob'; install: 'OB-Refactory'.
Consequently, the following instruction fails. Installer lukas project: 'ob'; install: 'OB-Regex';
You can find tmp.trace at http://ncellier.ifrance.com/Squeak/tmp.trace.gz 26MB gzipped.
------------------------------------------------------------------------------------------------------- Now it's easier to debug the change log opener in image. But it's not obvious whether we can reproduce in debugger because of UI, debugger, GC interactions... So we gonna use the MessageTally/Notification tricks:
build/squeak *.image `pwd`/TraceOpenFile.st &
Tally results are copied in OpenFileTally.txt. Highly suspect is #readOnlyCopy... RemoteString is guilty for not closing the file and relying on some finalization actions... And OBDynamicProtocols is abusing of this stuff...
So fixing RemoteString by gently closing the file does fix the linux problem... build/squeak *.image `pwd`/loadOBAlpha.st &
Now this is a good workaround, but what change introduced the problem ? there are two solutions: - either recent versions of OB are creating the problem - or recent changes in Polling UI/or Process changed finalization order
This should be tested in a 3.10.2 image