On Wed, Apr 28, 2004 at 10:36:16PM -0600, tim@sumeru.stanford.edu wrote:
This appears to be the same problem mentioned in recent reports of not being able to interrupt a recursive process. If something is making the low space signal not work properly - leaving the runaway process careering like a drunken driver down the roadway of memory loss - then one of our major system safeguards is inneffective. Not good.
[Background on this thread: Squeak hangs up and crashes with out-of-memory condition due to low space alarm not working. Observed on Unix/Linux VM.]
I can't quite get a handle on what is happening here, but I am fairly sure that it is *not* a problem with the low space signal. The signal is properly created in the VM. It is caught by the waiting low space watcher process, and the notifier is being displayed. *After* these things take place, Squeak crashes with an out of memory condition, as if the original runaway recursive process had proceeded without interruption (although I don't think this is what is literally happening).
I confirmed the above with some good ol' Fortran-style print debugging to stdout, and tested with #createStackOverflow. Unfortunately, I can't get much further with this approach. Adding a debug message in the #createStackOverflow method is enough to make the problem go away, so I can't say for sure if the #createStackOverflow is continuing to run after the low space signal has been received by the low space watcher process.
One other observation: The problem does not occur in MVC. The combination of Morphic and a Unix/Linux VM is apparently needed to make the problem occur.
For what it's worth, here is the stdout (console) output that I get when running #createStackOverflow on my Linux box. The messages are coming from SystemDictionary>>lowSpaceWatcher with debugging print statements added to indicate when the semaphore is installed and when the low space signal is handled.
587:149:SystemDictionary>>lowSpaceWatcher:install low space semaphore 587:149:SystemDictionary>>lowSpaceWatcher:enable low space interrupts 587:149:SystemDictionary>>lowSpaceWatcher:wait on low space semaphore 587:149:SystemDictionary>>lowSpaceWatcher:low space semaphore signal received 587:149:SystemDictionary>>lowSpaceWatcher:about to display low space notifier
out of memory
1114748112 SystemDictionary>createStackOverflow 1114748020 SystemDictionary>createStackOverflow 1114747928 SystemDictionary>createStackOverflow 1114747836 SystemDictionary>createStackOverflow 1114747744 SystemDictionary>createStackOverflow <snipped long stack dump, VM crash>
Consider this an interim report to keep the thread alive.
Dave