mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 14:50:19 +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
|
The Guile maintainer committee consists of
|
||||||
|
|
||||||
Jim Blandy
|
Jim Blandy
|
||||||
|
Mikael Djurfeldt
|
||||||
Maciej Stachowiak
|
Maciej Stachowiak
|
||||||
Marius Vollmer
|
Marius Vollmer
|
||||||
Mikael Djurfeldt
|
|
||||||
|
|
||||||
Contributors since the last release:
|
Contributors since the last release:
|
||||||
|
|
||||||
Greg Harvey
|
|
||||||
Jost Boekemeier
|
Jost Boekemeier
|
||||||
|
Greg Harvey
|
||||||
|
|
||||||
For fixes or providing information which led to a fix:
|
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
|
Brad Knotwell
|
||||||
Matthias Köppe
|
Matthias Köppe
|
||||||
Bruce Korb
|
Bruce Korb
|
||||||
|
Ralf Mattes
|
||||||
Shuji Narazaki
|
Shuji Narazaki
|
||||||
Nicolas Neuss
|
Nicolas Neuss
|
||||||
Han-Wen Nienhuys
|
Han-Wen Nienhuys
|
||||||
David Pirotte
|
David Pirotte
|
||||||
William Webber
|
Julian Satchell
|
||||||
Dale P. Smith
|
Dale P. Smith
|
||||||
Ralf Mattes
|
|
||||||
Jacques A. Vidrine.
|
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>
|
2000-11-28 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
* strop.c (scm_i_index): Removed outdated comment.
|
* 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
|
||||||
scm_join_thread (SCM t)
|
scm_join_thread (SCM thread)
|
||||||
#define FUNC_NAME s_join_thread
|
#define FUNC_NAME s_join_thread
|
||||||
{
|
{
|
||||||
SCM_VALIDATE_THREAD (1,t);
|
coop_t *thread_data;
|
||||||
coop_join (SCM_THREAD_DATA (t));
|
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;
|
return SCM_BOOL_T;
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
* If you do not wish that, delete this exception notice. */
|
* 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 */
|
/* 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;
|
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)
|
if (oldthread->specific)
|
||||||
free (oldthread->specific);
|
free (oldthread->specific);
|
||||||
#ifndef GUILE_PTHREAD_COMPAT
|
#ifndef GUILE_PTHREAD_COMPAT
|
||||||
|
@ -721,10 +716,6 @@ coop_join(coop_t *t)
|
||||||
{
|
{
|
||||||
coop_t *old, *newthread;
|
coop_t *old, *newthread;
|
||||||
|
|
||||||
/* Check if t is already finished */
|
|
||||||
if (t->base == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Create a join list if necessary */
|
/* Create a join list if necessary */
|
||||||
if (t->joining == NULL)
|
if (t->joining == NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue