Name: chT40241 Date: 10/22/97
We observed this problem attempting to debug the Microsoft sample applet under HotJava with jdb. However, the problem is unrelated to use of the debugger. It appears it could occur whenever the java_g VM is used. Exact steps are not shown, since the timing of the problem seems to be random, and can occur before the breakpoint at the start of the applet is even reached.
The problem is an assertion failure in gc.c, specifically, the line
in cacheFillHandles. The assertion fails because the routine cacheAlloc
can be called recursively. cacheAlloc sets cp->cache_busy on entry,
and resets it on exit. But when CacheAlloc is called recursively
(via a call to realObjectAlloc), when the recursive call exits, the bit is turned off, and so later the assertion fails. It is not clear to me whether simply removing the assertion is an appropriate response to the problem, or whether the fact that cache_busy is not set in this situation will cause other problems.
The problem occurs very frequently when we try to debug applets under HotJava, I would estimate on the order of 40 % of the time. For this reason, this is a critical problem for debugging applets and complex applications, even though use of the debugger is not the direct cause of the problem.