(make-thread, begin-handler): Use this handler. The most
important effect of this is that signals get unmasked.
Previously, when a signal was thrown signals remained masked
(signals get masked when a signal is taken) which influenced other
threads.
coop_condition_variable_init, coop_condition_variable_wait,
coop_condition_variable_signal): Changed return type from `void'
to `int'. This is to adhere closer to the pthreads interface.
This, in turn, is part of an attempt to provide C versions of the
mutex and condition variable primitives which can be part of a
frontend to COOP or pthreads.
* coop.c (coop_mutex_destroy, coop_condition_variable_wait_mutex,
coop_condition_variable_destroy): New functions.
* coop-threads.c (scm_wait_condition_variable): Use
coop_condition_variable_wait_mutex.
* coop-threads.h, coop-defs.h (coop_q_t, coop_m, coop_c):
Definitions moved to coop-defs.h.
* coop-defs.h (scm_mutex_init, scm_mutex_lock, scm_mutex_unlock,
scm_mutex_destroy, scm_cond_init, scm_cond_wait, scm_cond_signal,
scm_cond_destroy): New C interface to mutecis and cond vars.
ioext.c (%read-line): Return a cons of the input line and its terminator.
fports.c, genio.c, genio.h, ports.c, ports.h: Change fgets methods
to return the string length as well as its contents.
(fill_select_type): Return the highest file descriptor.
(scm_select): Tell select about the highest file descriptor. On
some systems the SELECT_SET_SIZE can be as much as 128 bytes.
Therefore the extra overhead for calculating the maximum fd seems
to be more than compensated. Is this correct? In any case,
scm_internal_select will be much faster with this info.
(scm_select, fill_select_type, set_element): Don't accept any kind
of object in the file descriptor list or vector.
* configure.in: AC_CHECK_FUNCS: add "system".
* simpos.c (scm_system): always define: use sysmissing if not
available. Check for HAVE_SYSTEM instead of _Windows (does
Windows lack system or does it have an unusable one?).
Check for error conditions -1 and 127. Use SCM_DEFER_INTS.
Let the argument be optional: if not supplied, call system(NULL).
* ports.c (scm_close_port): relax the type check from OPPORTP to
PORTP; closing a closed port is allowed.
newline. When fgets returns a string whose length is `size-1', it
is ambiguous whether a whole line was retrieved, so we must check
explicitly whether a line terminator is present.
(scm_init_backtrace): Initialize `the-last-stack' to a fluid.
(scm_backtrace): `the-last-stack' is now a fluid.
* init.c (scm_boot_guile_1): Moved call to scm_init_backtrace
after scm_init_fluids.
coop_wait_for_runnable_thread): Disable interrupts so that no
async is executed before a potential error_revive.
(scm_internal_select): Disable interrupts during the parts of the
code which manipulate the sleep queue and the file descriptors.