1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-13 09:10:26 +02:00
guile/libguile
Neil Jerram f9d44e8476 Fix hang in srfi-18.test
* libguile/threads.h (held_mutex): New field.

	* libguile/threads.c (enqueue, remqueue, dequeue): Use critical
	section to protect access to the queue.
	(guilify_self_1): Initialize held_mutex field.
	(on_thread_exit): If held_mutex non-null, unlock it.
	(fat_mutex_unlock, fat_cond_free, scm_make_condition_variable,
	fat_cond_signal, fat_cond_broadcast): Delete now unnecessary uses
	of c->lock.
	(fat_mutex_unlock): Pass m->lock to block_self() instead of
	c->lock; move scm_i_pthread_mutex_unlock(m->lock) call from before
	block_self() to after.
	(scm_pthread_cond_wait, scm_pthread_cond_timedwait,
	scm_i_thread_sleep_for_gc): Set held_mutex before pthread call;
	reset it afterwards.

I was seeing a hang in srfi-18.test, when running make check in master,
in the "exception handler installation is thread-safe" test.  It wasn't
100% reproducible, so looked like a race.

The problem is that wait-condition-variable is not actually
atomic in the way that it is supposed to be.  It unlocks the mutex,
then starts waiting on the cond var.  So it is possible for another
thread to lock the same mutex, and signal the cond var, before the
wait-condition-variable thread starts waiting.

In order for wait-condition-variable to be atomic - e.g. in a race
where thread A holds (Scheme-level) mutex M, and calls
(wait-condition-variable C M), and thread B calls (begin (lock-mutex
M) (signal-condition-variable C)) - it needs to call pthread_cond_wait
with the same underlying mutex as is involved in the `lock-mutex'
call.  In terms of the threads.c code, this means that it has to use
M->lock, not C->lock.

block_self() used its mutex arg for two purposes: for protecting
access and changes to the wait queue, and for the pthread_cond_wait
call.  But it wouldn't work reliably to use M->lock to protect C's
wait queue, because in theory two threads can call
(wait-condition-variable C M1) and (wait-condition-variable C M2)
concurrently, with M1 and M2 different.  So we either have to pass
both C->lock and M->lock into block_self(), or use some other mutex to
protect the wait queue.  For this patch, I switched to using the
critical section mutex, because that is a global and so easily
available.  (If that turns out to be a problem for performance, we
could make each queue structure have its own mutex, but there's no
reason to believe yet that it is a problem, because the critical
section mutex isn't used much overall.)

So then we call block_self() with M->lock, and move where M->lock is
unlocked to after the block_self() call, instead of before.

That solves the first hang, but introduces a new one, when a SRFI-18
thread is terminated (`thread-terminate!') between being launched
(`make-thread') and started (`thread-start!').  The problem now is
that pthread_cond_wait is a cancellation point (see man
pthread_cancel), so the pthread_cond_wait call is one of the few
places where a thread-terminate! call can take effect.  If the thread
is cancelled at that point, M->lock ends up still being locked, and
then when do_thread_exit() tries to lock M->lock again, it hangs.

The fix for that is a new `held_mutex' field in scm_i_thread, which is
set to point to the mutex just before a pthread_cond_(timed)wait call,
and set to NULL again afterwards.  If on_thread_exit() finds that
held_mutex is non-NULL, it unlocks that mutex.

A detail is that checking and unlocking held_mutex must be done before
on_thread_exit() calls scm_i_ensure_signal_delivery_thread(), because
the innards of scm_i_ensure_signal_delivery_thread() can do another
pthread_cond_wait() call and so overwrite held_mutex.  But that's OK,
because it's fine for the mutex check and unlock to happen outside
Guile mode.

Lastly, C->lock is then not needed, so I've removed it.
2008-10-24 22:08:59 +01:00
..
.gitignore update .gitignore files 2008-09-07 22:14:18 +02:00
__scm.h Cleanup mark-during-GC debug checks. 2008-09-09 23:08:16 -03:00
_scm.h Handle lack of struct dirent64' and readdir64_r ()' on HP-UX 11.11. 2008-07-17 00:20:31 +02:00
alist.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
alist.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
alloca.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
arbiters.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
arbiters.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
async.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
async.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
backtrace.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
backtrace.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
boolean.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
boolean.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
c-tokenize.lex Fix c-tokenize.c error: 'input' defined but not used, when compiling with GCC 4.3.0 2008-05-05 23:47:24 +01:00
ChangeLog-1996-1999
ChangeLog-2000
ChangeLog-2008 Rename ChangeLog' files to ChangeLog-2008'. 2008-09-12 21:49:58 +02:00
ChangeLog-scm
ChangeLog-threads
chars.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
chars.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
continuations.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
continuations.h make call/cc capture and restore the vm stacks 2008-09-24 17:04:14 +02:00
conv-integer.i.c * numbers.c (scm_i_range_error): New. 2004-10-19 15:59:56 +00:00
conv-uinteger.i.c * numbers.c (scm_i_range_error): New. 2004-10-19 15:59:56 +00:00
convert.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
convert.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
convert.i.c (scm_array_handle_release): New, changed all uses of 2005-01-06 18:56:34 +00:00
coop-pthreads.c * configure.in: New check for uca lib (needed for IA64 on HP-UX). 2006-10-25 22:37:24 +00:00
coop-pthreads.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
coop.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
cpp_cnvt.awk Use scm_from_int instead of SCM_MAKINUM. 2004-07-10 13:42:18 +00:00
cpp_err_symbols.in
cpp_errno.c
cpp_sig_symbols.in Add SIGSYS. 2004-04-15 00:47:02 +00:00
cpp_signal.c
debug-malloc.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
debug-malloc.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
debug.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
debug.h actually compile start-stack to something useful 2008-09-26 12:03:36 +02:00
deprecated.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
deprecated.h merge from 1.8 2007-01-15 23:42:45 +00:00
deprecation.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
deprecation.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
discouraged.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
discouraged.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
dynl.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
dynl.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
dynwind.c fix dynwind + nonlocal entrance/exit + programs bug 2008-10-09 11:09:43 +02:00
dynwind.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
environments.c Remove GH and its traces. 2008-09-28 18:42:02 -03:00
environments.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
eq.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
eq.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
error.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
error.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
eval.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
eval.h export `make-promise' to scheme 2008-09-25 16:16:35 +02:00
eval.i.c export `make-promise' to scheme 2008-09-25 16:16:35 +02:00
evalext.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
evalext.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
extensions.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
extensions.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
feature.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
feature.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
filesys.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
filesys.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
fluids.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
fluids.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
fports.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
fports.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
frames.c add a multiple values return address to stack frames 2008-09-13 19:22:28 +02:00
frames.h add a multiple values return address to stack frames 2008-09-13 19:22:28 +02:00
futures.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
futures.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
gc-card.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gc-freelist.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
gc-malloc.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gc-mark.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gc-segment-table.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gc-segment.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gc.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gc.h Revise GC asserts. 2008-09-11 12:10:58 -03:00
gc_os_dep.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gdb_interface.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
gdbint.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gdbint.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
gen-scmconfig.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gen-scmconfig.h.in Handle lack of struct dirent64' and readdir64_r ()' on HP-UX 11.11. 2008-07-17 00:20:31 +02:00
gettext.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gettext.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
goops.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
goops.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
gsubr.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
gsubr.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
guardians.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
guardians.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
guile-doc-snarf.in merge from 1.8 branch 2006-04-17 00:05:42 +00:00
guile-func-name-check.in merge from 1.8 branch 2006-04-17 00:05:42 +00:00
guile-snarf-docs.in merge from 1.8 branch 2006-04-17 00:05:42 +00:00
guile-snarf.awk.in merge from 1.8 branch 2006-04-17 00:05:42 +00:00
guile-snarf.in guile-snarf: Honor $TMPDIR. 2008-02-12 14:26:37 +00:00
guile.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
hash.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
hash.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
hashtab.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
hashtab.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
hooks.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
hooks.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
i18n.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
i18n.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
inet_aton.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
init.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
init.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
inline.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
inline.h Cleanup mark-during-GC debug checks. 2008-09-09 23:08:16 -03:00
instructions.c merge guile-vm into libguile itself 2008-08-21 18:39:30 -07:00
instructions.h merge guile-vm into libguile itself 2008-08-21 18:39:30 -07:00
ioext.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
ioext.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
iselect.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
keywords.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
keywords.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
lang.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
lang.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
libgettext.h Added missing files for `(ice-9 i18n)'. 2006-11-18 18:18:23 +00:00
list.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
list.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
load.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
load.h make primitive-load-path load compiled files if available 2008-09-02 11:00:32 -07:00
locale-categories.h Fix compilation of `libguile-i18n' on MinGW. 2008-09-10 11:38:23 +02:00
macros.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
macros.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
Makefile.am Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
mallocs.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
mallocs.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
memmove.c
mkstemp.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
modules.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
modules.h move module-public-interface to C, and expose it as C API 2008-09-29 21:36:25 +02:00
net_db.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
net_db.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
null-threads.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
null-threads.h Changes from arch/CVS synchronization 2007-10-20 11:09:58 +00:00
numbers.c Fix for incorrect (gcd -2) => -2; should give 2. 2008-09-22 21:21:20 +01:00
numbers.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
objcodes.c merge guile-vm into libguile itself 2008-08-21 18:39:30 -07:00
objcodes.h merge guile-vm into libguile itself 2008-08-21 18:39:30 -07:00
objects.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
objects.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
objprop.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
objprop.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
options.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
options.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
pairs.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
pairs.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
ports.c Make multi-byte reads on unbuffered ports more efficient. 2008-09-15 18:52:51 +01:00
ports.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
posix.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
posix.h Don't declare scm_i_locale_mutex' as SCM_INTERNAL'. 2008-07-04 22:22:06 +02:00
print.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
print.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
private-gc.h Revise GC asserts. 2008-09-11 12:10:58 -03:00
private-options.h * private-options.h: idem. 2007-01-22 15:20:35 +00:00
procprop.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
procprop.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
procs.c Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
procs.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
programs.c revert part of 7ff017002d that caused missed references 2008-09-28 23:08:14 +02:00
programs.h rework late binding resolution to be simpler and more efficient 2008-09-09 07:15:01 +02:00
properties.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
properties.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
pthread-threads.h Changes from arch/CVS synchronization 2007-10-20 11:09:58 +00:00
putenv.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
quicksort.i.c * Makefile.am (libguile_la_SOURCES, DOT_X_FILES, DOT_DOC_FILES, 2005-01-02 19:16:39 +00:00
ramap.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
ramap.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
random.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
random.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
rdelim.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
rdelim.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
read.c Make literal strings (i.e., returned by `read') read-only. 2008-09-23 18:45:27 +02:00
read.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
regex-posix.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
regex-posix.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
remaining-docs-needed
root.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
root.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
run-test
rw.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
rw.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
scmconfig.h.top merge from 1.8 branch 2006-04-17 00:05:42 +00:00
scmsigs.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
scmsigs.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
script.c Remove GH and its traces. 2008-09-28 18:42:02 -03:00
script.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
simpos.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
simpos.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
smob.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
smob.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
snarf.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
socket.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
socket.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
sort.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
sort.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
srcprop.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
srcprop.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
srfi-4.c Make multi-byte reads on unbuffered ports more efficient. 2008-09-15 18:52:51 +01:00
srfi-4.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
srfi-4.i.c (take_uvec): Make BASE pointer non-const. 2005-12-06 21:42:19 +00:00
srfi-13.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
srfi-13.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
srfi-14.c Changes from arch/CVS synchronization 2007-07-29 14:58:21 +00:00
srfi-14.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
stackchk.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
stackchk.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
stacks.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
stacks.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
stime.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
stime.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
strerror.c merge from 1.8 branch 2006-04-17 00:05:42 +00:00
strings.c Make literal strings (i.e., returned by `read') read-only. 2008-09-23 18:45:27 +02:00
strings.h Make literal strings (i.e., returned by `read') read-only. 2008-09-23 18:45:27 +02:00
strorder.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
strorder.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
strports.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
strports.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
struct.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
struct.h Use word_2 to store mark bits for freeing structs and vtables in the 2008-08-16 13:21:21 -03:00
symbols.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
symbols.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
tags.h Disable type-checking of `SCM_UNPACK' for the broken HP compilers. 2008-06-28 20:31:01 +02:00
threads.c Fix hang in srfi-18.test 2008-10-24 22:08:59 +01:00
threads.h Fix hang in srfi-18.test 2008-10-24 22:08:59 +01:00
throw.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
throw.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
unif.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
unif.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
validate.h Changes from arch/CVS synchronization 2007-12-08 16:00:56 +00:00
values.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
values.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
variable.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
variable.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
vectors.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
vectors.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
version.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
version.h.in Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
vm-bootstrap.h merge guile-vm into libguile itself 2008-08-21 18:39:30 -07:00
vm-engine.c fix bug in self-tail-recursion with "external" variables; other sundries 2008-10-18 19:21:44 +02:00
vm-engine.h ensure that lists pushed onto the stack are proper 2008-10-16 13:24:39 +02:00
vm-expand.h merge guile-vm into libguile itself 2008-08-21 18:39:30 -07:00
vm-i-loader.c precise stack marking, fix some missed references, still imperfect 2008-10-03 16:00:30 +02:00
vm-i-scheme.c fix bug in self-tail-recursion with "external" variables; other sundries 2008-10-18 19:21:44 +02:00
vm-i-system.c fix bug in self-tail-recursion with "external" variables; other sundries 2008-10-18 19:21:44 +02:00
vm.c truly thread-local vms; don't compile popen.scm 2008-10-11 11:54:12 +02:00
vm.h make call/cc capture and restore the vm stacks 2008-09-24 17:04:14 +02:00
vports.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
vports.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
weaks.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
weaks.h Add `SCM_INTERNAL' macro, use it. 2008-05-31 23:21:02 +02:00
win32-dirent.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
win32-dirent.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
win32-socket.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
win32-socket.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00
win32-uname.c Include <config.h> in all C files; use #ifdef HAVE_CONFIG_H' rather than #if'. 2008-09-13 15:35:27 +02:00
win32-uname.h merge from 1.8 branch 2006-04-17 00:05:42 +00:00