On 10/12/06, Evgueni Brevnov <[EMAIL PROTECTED]> wrote:
Hi, I do the following: hythread_suspend_disable(); <do unsafe actions> hysem_wait(semaphore); <do unsafe actions> hythread_suspend_enable(); By saying hythread_suspend_disable(); I expect the thread can't be suspended until hythread_suspend_enable() is called.
Some observations: 1) The above code sequence is a really good diagnostic test. It definitely breaks the suspend enable/disable model. It is an illegal code sequence that can cause the entire system to hang if there is a GC while stuck in a semaphore wait. If anything, I expect the system to hang, not reset the enable/disable state and continue executing. 2) I don't understand why hysem_wait() *enables* the GC. My only guess is that someone hit a problem where the system deadlocked in hysem_wait() and hacked in the enable. Any clues who did this and why they did this?? 3) How about putting an assert(gc enabled == true) ; in hysem_wait() {...} and debugging the cases where gc is not enabled and the next line of code executes a wait. But hysem_wait()
resets disabled mode and enables thread suspension. As a result GC can happen when it must not. hysem_wait is based on conditional variables so the same can happen when conditional variables is used. Do you see the problem here? Or I miss something? Thanks Evgueni --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Weldon Washburn Intel Middleware Products Division