re PR libgcj/21557 (Hash synchronization: Thread.interrupt() can make _Jv_MonitorEnter hang)
2005-05-13 Bryce McKinlay <mckinlay@redhat.com> PR libgcj/21557 * java/lang/natObject.cc (_Jv_MonitorEnter): Save and clear thread interrupt status flag if _Jv_CondWait is interrupted. From-SVN: r99687
This commit is contained in:
parent
77d0a09d7f
commit
c8c03f8479
@ -1,3 +1,9 @@
|
||||
2005-05-13 Bryce McKinlay <mckinlay@redhat.com>
|
||||
|
||||
PR libgcj/21557
|
||||
* java/lang/natObject.cc (_Jv_MonitorEnter): Save and clear thread
|
||||
interrupt status flag if _Jv_CondWait is interrupted.
|
||||
|
||||
2005-05-13 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gnu/gcj/runtime/SystemClassLoader.java (init): Handle empty
|
||||
|
@ -35,6 +35,8 @@ details. */
|
||||
|
||||
|
||||
|
||||
using namespace java::lang;
|
||||
|
||||
// This is used to represent synchronization information.
|
||||
struct _Jv_SyncInfo
|
||||
{
|
||||
@ -926,12 +928,22 @@ retry:
|
||||
release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
|
||||
// release lock on he
|
||||
LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
|
||||
// If _Jv_CondWait is interrupted, we ignore the interrupt, but
|
||||
// restore the thread's interrupt status flag when done.
|
||||
jboolean interrupt_flag = false;
|
||||
while ((he -> address & ~FLAGS) == (address & ~FLAGS))
|
||||
{
|
||||
// Once converted, the lock has to retain heavyweight
|
||||
// status, since heavy_count > 0 .
|
||||
_Jv_CondWait (&(hl->si.condition), &(hl->si.mutex), 0, 0);
|
||||
// status, since heavy_count > 0.
|
||||
int r = _Jv_CondWait (&(hl->si.condition), &(hl->si.mutex), 0, 0);
|
||||
if (r == _JV_INTERRUPTED)
|
||||
{
|
||||
interrupt_flag = true;
|
||||
Thread::currentThread()->interrupt_flag = false;
|
||||
}
|
||||
}
|
||||
if (interrupt_flag)
|
||||
Thread::currentThread()->interrupt_flag = interrupt_flag;
|
||||
keep_live(addr);
|
||||
// Guarantee that hl doesn't get unlinked by finalizer.
|
||||
// This is only an issue if the client fails to release
|
||||
|
Loading…
Reference in New Issue
Block a user