natObject.cc (notify): Throw message with IllegalMonitorStateException.
1999-12-22 Bryce McKinlay <bryce@albatross.co.nz> * java/lang/natObject.cc (notify): Throw message with IllegalMonitorStateException. (notifyAll): Ditto. (wait): Ditto. * java/lang/Thread.java (isInterrupted): Don't clear interrupt_flag. (isInterrupted_): New function, which does clear interrupt_flag. (interrupt): Use `isInterrupted_'. * java/lang/natThread.cc (interrupt): Add comment. (join): Set `Prev' in joiner loop. Change various calls to `isInterrupted' to use `isInterrupted_'. * posix-threads.cc (_Jv_CondWait): Allways use pthread_cond_timedwait on linux. Set result to 0 on an interrupt. Test interrupted status of java Thread object directly. FLAG_INTERRUPTED: removed. (_Jv_ThreadStart): Throw OutOfMemoryError if pthread_create fails. (_Jv_ThreadInterrupt): Don't set FLAG_INTERRUPTED. (_Jv_InitThreads): Don't block SIGINT. (_Jv_ThreadWait): Don't configure SIGINT handler. From-SVN: r31082
This commit is contained in:
parent
07875628ee
commit
43cbc9430d
4 changed files with 108 additions and 64 deletions
|
@ -130,10 +130,13 @@ java::lang::Thread::interrupt (void)
|
|||
// another thread to exit.
|
||||
natThread *nt = (natThread *) data;
|
||||
_Jv_MutexLock (&nt->interrupt_mutex);
|
||||
// Notify the interrupt condition to interrupt sleep() and join() calls.
|
||||
_Jv_CondNotify (&nt->interrupt_cond, &nt->interrupt_mutex);
|
||||
_Jv_MutexUnlock (&nt->interrupt_mutex);
|
||||
|
||||
// Send a signal to the target thread to interrupt system calls. On Linux,
|
||||
// this will also interrupt the target thread from *any* _Jv_CondWait call,
|
||||
// ie wait(). This behaviour is not portable, however.
|
||||
_Jv_ThreadInterrupt (nt->thread);
|
||||
_Jv_MutexUnlock (&nt->interrupt_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -145,7 +148,7 @@ java::lang::Thread::join (jlong millis, jint nanos)
|
|||
_Jv_Throw (new IllegalArgumentException);
|
||||
|
||||
Thread *current = currentThread ();
|
||||
if (current->isInterrupted ())
|
||||
if (current->isInterrupted_ ())
|
||||
_Jv_Throw (new InterruptedException);
|
||||
|
||||
// Update the list of all threads waiting for this thread to exit.
|
||||
|
@ -199,11 +202,12 @@ java::lang::Thread::join (jlong millis, jint nanos)
|
|||
t->next = 0;
|
||||
break;
|
||||
}
|
||||
prev = t;
|
||||
}
|
||||
JvAssert (t != NULL);
|
||||
_Jv_MonitorExit (this);
|
||||
|
||||
if (current->isInterrupted ())
|
||||
if (current->isInterrupted_ ())
|
||||
_Jv_Throw (new InterruptedException);
|
||||
}
|
||||
|
||||
|
@ -240,7 +244,7 @@ java::lang::Thread::sleep (jlong millis, jint nanos)
|
|||
++nanos;
|
||||
|
||||
Thread *current = currentThread ();
|
||||
if (current->isInterrupted ())
|
||||
if (current->isInterrupted_ ())
|
||||
_Jv_Throw (new InterruptedException);
|
||||
|
||||
// We use a condition variable to implement sleeping so that an
|
||||
|
@ -253,7 +257,7 @@ java::lang::Thread::sleep (jlong millis, jint nanos)
|
|||
millis, nanos);
|
||||
}
|
||||
|
||||
if (current->isInterrupted ())
|
||||
if (current->isInterrupted_ ())
|
||||
_Jv_Throw (new InterruptedException);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue