[BUG] User interrupts no longer interrupt locked UI process

Tim Rowledge tim at sumeru.stanford.edu
Fri Mar 26 03:30:27 UTC 2004


I've spent the last several days trying to track some of this problem
down. Yuck. poop.

Now bear in mind that I am running a rather different VM to most of you
which doesn't time each prim call and calls prims by function address
rather than from a case statement. Also, my machine doesn't do
growObjectMemory().

So far it looks like I can keep doing regular calls to ioProcess even
when there is a long running computation with no calls to ioGetNext
Event(). So far so good. The changes don't even cost much time so far as
I can measure and since the macro benchmark performance is way better
(for RISC OS - so far linux/win32& mac seems to improve 5-7%) we're
still ahead.

The bad news is that Ned's trivial recursion example still blows the vm out
of the water unless you hit the interupt key within a tiny fraction of a
second after starting it. Even on my slow machine I do around 1.2 million
sends per second so with memory available for 700k contexts, it doesn't
take long to run out of road.

Of course what _should_ happen is a low space notification well before
that happens. It never seems to arrive and instead I get a fatal vm
error in context allocation. I tried increasing the lowSpaceThreshold
in SystemDictionary since 200000 bytes seems a bit small. At
2,000,000 it still crashes BUT a notifier does appear. The really funny
part is that it doesn't have this problem in an MVC project; the low
space notifier pops up like a nice little notifier, you can cancel the
recursion and all will be well. From my vm logging it would seem that
under morphic the recuring process that has used all the space is not
being suspended (it's not easy to tell as yet) and that even with a
lowspace threshold of 8Mb we get a vm crash a second or so after the
low space notifier appears. Basically the lowspace watcher is triggered
and sets the vm threshold to 0, some process continues chewing on
contexts and "boom", there is an earth shattering kaboom.

So, right now I'm going to claim that the lowSpaceWatcher process and
the morphic notifier related to it need a bunch of work to be
effective. It really isn't very helpful for the supposed debugging tool
to blow the vm away...

We don't get quite the same problem with an iterative process since the
new & new: primitives can fail and trigger the low space sem
explicitly. When sending a message we don't do that; perhaps we should.

tim
--
Tim Rowledge, tim at sumeru.stanford.edu, http://sumeru.stanford.edu/tim
The world is coming to an end...  SAVE YOUR BUFFERS!!



More information about the Squeak-dev mailing list