OSDN Git Service

Allocate interrupted exception before re-acquiring lock
authorMathieu Chartier <mathieuc@google.com>
Thu, 10 Mar 2016 18:49:35 +0000 (10:49 -0800)
committerMathieu Chartier <mathieuc@google.com>
Thu, 10 Mar 2016 19:42:11 +0000 (11:42 -0800)
commitdaed5d81e2fdb9d1e03ee6c34567347b92dcfb22
treef27fb31f3ad5d6dc0a45f025fedf98c1a011c069
parent8e213515077e11acdd664ec4a770a73e2f804863
Allocate interrupted exception before re-acquiring lock

Allocating the monitor exception after acquiring the lock can cause
a deadlock in the following scenario:

Reference queue daemon interrupted from wait() on
ReferenceQueue.class. Tries to allocate exception and starts a GC
that blocks on WaitForGcToComplete.

Some other thread is already doing a GC, and tries to enqueue the
cleared refereneces. This deadlocks trying to lock Reference.class
in ReferenceQueue.add.

Bug: 27508829
Change-Id: Icbc18b6b8d1e906c3f7413810d6cefdda06eb921
runtime/monitor.cc