1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 05:50:26 +02:00

* coop-threads.c: Don't join finished threads. Thanks to Julian Satchell.

* coop.c: Removed old non-working code.
This commit is contained in:
Dirk Herrmann 2000-11-30 10:26:44 +00:00
parent 818febc097
commit 21e8f468cf
4 changed files with 32 additions and 17 deletions

9
THANKS
View file

@ -1,14 +1,14 @@
The Guile maintainer committee consists of
Jim Blandy
Mikael Djurfeldt
Maciej Stachowiak
Marius Vollmer
Mikael Djurfeldt
Contributors since the last release:
Greg Harvey
Jost Boekemeier
Greg Harvey
For fixes or providing information which led to a fix:
@ -19,11 +19,12 @@ For fixes or providing information which led to a fix:
Brad Knotwell
Matthias Köppe
Bruce Korb
Ralf Mattes
Shuji Narazaki
Nicolas Neuss
Han-Wen Nienhuys
David Pirotte
William Webber
Julian Satchell
Dale P. Smith
Ralf Mattes
Jacques A. Vidrine.
William Webber

View file

@ -1,3 +1,13 @@
2000-11-30 Dirk Herrmann <D.Herrmann@tu-bs.de>
Thanks to Julian Satchell for the bug report:
* coop-threads.c (scm_join_thread): Check whether a thread is
finished before trying to join it.
* coop.c (coop_aborthelp, coop_join): When a thread finishes, its
stack base is not set to NULL any more.
2000-11-28 Dirk Herrmann <D.Herrmann@tu-bs.de>
* strop.c (scm_i_index): Removed outdated comment.

View file

@ -377,11 +377,24 @@ scm_spawn_thread (scm_catch_body_t body, void *body_data,
}
SCM
scm_join_thread (SCM t)
scm_join_thread (SCM thread)
#define FUNC_NAME s_join_thread
{
SCM_VALIDATE_THREAD (1,t);
coop_join (SCM_THREAD_DATA (t));
coop_t *thread_data;
SCM_VALIDATE_THREAD (1, thread);
/* Dirk:FIXME:: SCM_THREAD_DATA is a handle for a thread. It may be that a
* certain thread implementation uses a value of 0 as a valid thread handle.
* With the following code, this thread would always be considered finished.
*/
/* Dirk:FIXME:: With preemptive threading, a thread may finish immediately
* after SCM_THREAD_DATA is read. Thus, it must be guaranteed that the
* handle remains valid until the thread-object is garbage collected, or
* a mutex has to be used for reading and modifying SCM_THREAD_DATA.
*/
thread_data = SCM_THREAD_DATA (thread);
if (thread_data)
/* The thread is still alive */
coop_join (thread_data);
return SCM_BOOL_T;
}
#undef FUNC_NAME

View file

@ -40,7 +40,7 @@
* If you do not wish that, delete this exception notice. */
/* $Id: coop.c,v 1.25 2000-04-21 14:16:30 mdj Exp $ */
/* $Id: coop.c,v 1.26 2000-11-30 10:26:44 dirk Exp $ */
/* Cooperative thread library, based on QuickThreads */
@ -698,11 +698,6 @@ coop_aborthelp (qt_t *sp, void *old, void *null)
{
coop_t *oldthread = (coop_t *) old;
#if 0
/* Marking old->base NULL indicates that this thread is dead */
oldthread->base = NULL;
#endif
if (oldthread->specific)
free (oldthread->specific);
#ifndef GUILE_PTHREAD_COMPAT
@ -721,10 +716,6 @@ coop_join(coop_t *t)
{
coop_t *old, *newthread;
/* Check if t is already finished */
if (t->base == NULL)
return;
/* Create a join list if necessary */
if (t->joining == NULL)
{