1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 17:20:29 +02:00

Merge remote-tracking branch 'local-2.0/stable-2.0'

This commit is contained in:
Andy Wingo 2011-06-16 20:01:56 +02:00
commit 99cc1092a8
115 changed files with 4810 additions and 1543 deletions

View file

@ -39,6 +39,7 @@
#endif
#include <assert.h>
#include <fcntl.h>
#include <nproc.h>
#include "libguile/validate.h"
@ -57,15 +58,6 @@
#include "libguile/strings.h"
#include "libguile/weaks.h"
#ifdef __MINGW32__
#ifndef ETIMEDOUT
# define ETIMEDOUT WSAETIMEDOUT
#endif
# include <fcntl.h>
# include <process.h>
# define pipe(fd) _pipe (fd, 256, O_BINARY)
#endif /* __MINGW32__ */
#include <full-read.h>
@ -484,6 +476,24 @@ static int thread_count;
static SCM scm_i_default_dynamic_state;
/* Run when a fluid is collected. */
void
scm_i_reset_fluid (size_t n, SCM val)
{
scm_i_thread *t;
scm_i_pthread_mutex_lock (&thread_admin_mutex);
for (t = all_threads; t; t = t->next_thread)
if (SCM_I_DYNAMIC_STATE_P (t->dynamic_state))
{
SCM v = SCM_I_DYNAMIC_STATE_FLUIDS (t->dynamic_state);
if (n < SCM_SIMPLE_VECTOR_LENGTH (v))
SCM_SIMPLE_VECTOR_SET (v, n, val);
}
scm_i_pthread_mutex_unlock (&thread_admin_mutex);
}
/* Perform first stage of thread initialisation, in non-guile mode.
*/
static void
@ -520,7 +530,7 @@ guilify_self_1 (struct GC_stack_base *base)
t.sleep_object = SCM_BOOL_F;
t.sleep_fd = -1;
if (pipe (t.sleep_pipe) != 0)
if (pipe2 (t.sleep_pipe, O_CLOEXEC) != 0)
/* FIXME: Error conditions during the initialization phase are handled
gracelessly since public functions such as `scm_init_guile ()'
currently have type `void'. */