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:
parent
818febc097
commit
21e8f468cf
4 changed files with 32 additions and 17 deletions
9
THANKS
9
THANKS
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue