You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Gregory Shimansky (JIRA)" <ji...@apache.org> on 2006/12/01 15:41:23 UTC

[jira] Closed: (HARMONY-2320) [drlvm] Throw exception outside of HWE handler to avoid deadlocks on Windows XP

     [ http://issues.apache.org/jira/browse/HARMONY-2320?page=all ]

Gregory Shimansky closed HARMONY-2320.
--------------------------------------


VERIFIED.

> [drlvm] Throw exception outside of HWE handler to avoid deadlocks on Windows XP
> -------------------------------------------------------------------------------
>
>                 Key: HARMONY-2320
>                 URL: http://issues.apache.org/jira/browse/HARMONY-2320
>             Project: Harmony
>          Issue Type: Sub-task
>         Environment: Windows XP
>            Reporter: Salikh Zakirov
>         Assigned To: Gregory Shimansky
>         Attachments: fix_nt_exception_handler-updated.diff, fix_nt_exception_handler.diff
>
>
> The reason of hang of gc.LOS is deadlock on a thread suspension:
> Assume thread A handles NPE:
> A1) segfault occured
> A2) grab "system hwe lock" and call vectored_exception_handler
> A3) instantiate NullPointerException object
> A4) set up throwing NullPointerExceptionObject in the register snapshot
> A5) return from vectored_exception_handler release "system hwe lock"
> Let's next assume that garbage collection was started exactly when thread A
> was in progress of running NullPointerException constructor (A3). Then, thread A
> will be suspended while still holding "system hwe lock".
> Another thread B at that moment have just perfomed access to null pointer (B1),
> and then it is blocked on a "system hwe lock" (B2),
> Since this lock is system and not known to Thread Manager, the thread C which tries to start garbage
> collection and so requested suspension of all threads, and then waits forever for thread B to reach a safepoint,
> while B is waiting for thread A to release "system hwe lock", and thread A was already suspended and waits
> for thread C to resume it.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira