mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-18 01:30:27 +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
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue