[kaffe] CVS kaffe (guilhem): Fixes for freebsd5.
Kaffe CVS
cvs-commits at kaffe.org
Sat Apr 2 07:38:29 PST 2005
PatchSet 5643
Date: 2005/04/02 15:33:33
Author: guilhem
Branch: HEAD
Tag: (none)
Log:
Fixes for freebsd5.
* kaffe/kaffevm/systems/unix-pthreads/thread-impl.c
(jthread_exit): Removed the use of pthread_cancel during
final shutdown.
* kaffe/kaffevm/systems/unix-pthreads/lock-impl.c
(clearBlockState): Do not exit if the thread is in BS_THREAD
blockstate it means the mutex be released.
Members:
ChangeLog:1.3813->1.3814
kaffe/kaffevm/systems/unix-pthreads/lock-impl.c:1.20->1.21
kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:1.79->1.80
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3813 kaffe/ChangeLog:1.3814
--- kaffe/ChangeLog:1.3813 Sat Apr 2 14:17:02 2005
+++ kaffe/ChangeLog Sat Apr 2 15:33:33 2005
@@ -1,3 +1,13 @@
+2005-04-02 Guilhem Lavaux <guilhem at kaffe.org>
+
+ * kaffe/kaffevm/systems/unix-pthreads/thread-impl.c
+ (jthread_exit): Removed the use of pthread_cancel during
+ final shutdown.
+
+ * kaffe/kaffevm/systems/unix-pthreads/lock-impl.c
+ (clearBlockState): Do not exit if the thread is in BS_THREAD
+ blockstate it means the mutex be released.
+
2005-04-02 Riccardo Mottola <zuse at libero.it>
* FAQ/FAQ.Known-Bugs:
Index: kaffe/kaffe/kaffevm/systems/unix-pthreads/lock-impl.c
diff -u kaffe/kaffe/kaffevm/systems/unix-pthreads/lock-impl.c:1.20 kaffe/kaffe/kaffevm/systems/unix-pthreads/lock-impl.c:1.21
--- kaffe/kaffe/kaffevm/systems/unix-pthreads/lock-impl.c:1.20 Thu Mar 31 10:39:29 2005
+++ kaffe/kaffe/kaffevm/systems/unix-pthreads/lock-impl.c Sat Apr 2 15:33:36 2005
@@ -76,7 +76,7 @@
/* Catch an interrupt event sent while we were being killed.
* This is needed for Darwin's pthreads.
*/
- if (cur->status == THREAD_KILL)
+ if (cur->status == THREAD_KILL && ((cur->blockState & BS_THREAD) == 0))
pthread_exit(NULL);
pthread_sigmask(SIG_SETMASK, old_mask, NULL);
Index: kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c
diff -u kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:1.79 kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:1.80
--- kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:1.79 Fri Apr 1 17:21:52 2005
+++ kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c Sat Apr 2 15:33:36 2005
@@ -801,6 +801,9 @@
break;
}
+ if (cur->status == THREAD_KILL)
+ break;
+
/* Wait until we get re-used (by TcreateThread). No need to update the
* blockState, since we aren't active anymore */
repsem_wait( &cur->sem);
@@ -1063,15 +1066,14 @@
if ( t != cur && t != firstThread) {
/* Mark the thread as to be killed. */
t->status = THREAD_KILL;
- /* Send an interrupt event to the remote thread.
- * We try to restrain ourself from using pthread_cancel
- * as it seems to cause deadlocks on some pthread
- * implementations.
+ /* Send an interrupt event to the remote thread to wake up.
+ * This may not work in any cases. However that way we prevent a
+ * predictable deadlock on some threads implementation.
*/
- if (t->blockState & (BS_CV|BS_CV_TO))
- jthread_interrupt(t);
- else
- pthread_cancel(t->tid);
+ jthread_interrupt(t);
+ unprotectThreadList(cur);
+ pthread_join(t->tid, NULL);
+ protectThreadList(cur);
}
}
More information about the kaffe
mailing list