+2003-01-10 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * threads.c (scm_timed_wait_condition_variable): Support timed
+ waiting also for simple condition variables.
+
+ * goops.c (TEST_CHANGE_CLASS): Use scm_change_object_class instead
+ of calling the procedure change-object-class.
+
+2003-01-09 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * ramap.c (scm_ramapc): Typo in error message.
+
+2003-01-08 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * goops.c (scm_sys_prep_layout_x): Bugfix: Only create layout for
+ slots with instance allocation.
+
+ * goops.c, goops.h (scm_class_extended_generic_with_setter): New
+ class.
+ (scm_compute_applicable_methods): Use scm_generic_function_methods.
+
+ * goops.c (scm_generic_function_methods): Support extended
+ generic functions.
+
+2002-12-29 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * eval.c (unmemocopy): Bugfix: scm_sym_delay --> scm_sym_future.
+ Thanks to Neil for pointing this out!
+
+2002-12-29 Neil Jerram <neil@ossau.uklinux.net>
+
+ * lang.h: Remove declarations matching definitions removed from
+ lang.c (just below).
+
+2002-12-28 Neil Jerram <neil@ossau.uklinux.net>
+
+ * lang.c (scm_nil_cons, scm_nil_car, scm_nil_cdr, scm_null,
+ scm_m_while, scm_nil_eq): Remove definitions that were superfluous
+ and already commented out.
+
+ * read.h (scm_lreadparen), read.c (scm_lreadr, scm_read_token,
+ scm_lreadparen): Support reading vectors with Elisp syntax if
+ SCM_ELISP_READ_EXTENSIONS is defined. (SCM_ELISP_READ_EXTENSIONS
+ is not currently defined, and there isn't even a configure switch
+ to enable it yet.)
+
+2002-12-26 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * Makefile.am (c-tokenize.o): Refer to source via $< so that vpath
+ builds work.
+ (EXTRA_DIST): Added version.h.in.
+
+2002-12-21 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ This change makes it possible for one thread to do lazy sweeping
+ while other threads are running. Now only the mark phase need to
+ have all threads asleep. We should look further into this issue.
+ Presently, I've put the locking of scm_i_sweep_mutex at
+ "conservative" places due to my current lack of knowledge about
+ the garbage collector. Please feel free to restrict these regions
+ further to allow for maximal parallelism!
+
+ * gc.c, gc.h (scm_i_sweep_mutex): New mutex.
+
+ * gc.c (scm_gc_for_newcell), gc-malloc.c (scm_realloc,
+ scm_gc_register_collectable_memory): Substitute locking of
+ scm_i_sweep_mutex for calls to scm_i_thread_put_to_sleep.
+ (scm_igc): Lock sweep mutex here instead of in callers; Calls to
+ scm_i_thread_put_to_sleep/scm_i_thread_wake_up used to demarkate
+ the single-thread section (which now only contains the mark
+ phase).
+ (scm_gc): Don't lock sweeo mutex here since scm_igc locks it;
+ Removed SCM_DEFER/ALLOW_INTS. Simply call scm_igc directly.
+
+ * threads.c (gc_section_mutex): Removed.
+
+2002-12-19 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * threads.c (create_thread): Clear parent field in root state in
+ order not to unnecessarily remember dead threads.
+
+ * eval.c (call_subr2o_1, call_lsubr2_2): New functions.
+ (scm_trampoline_1, scm_trampoline_2): Use them.
+
+2002-12-18 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ Partial introduction of real plugin interface.
+
+ * Makefile.am (modinclude_HEADERS): Added threads-plugin.h.
+ (EXTRA_DIST): Added threads-plugin.c.
+
+ * threads-plugin.h, threads-plugin.c: New files.
+
+ * threads.h: #include "libguile/threads-plugin.h".
+
+ * threads.c: #include "libguile/threads-plugin.c".
+
+ * pthread-threads.c: Temporarily remove debugging functions.
+
+ * threads.c, threads.h (scm_yield): Added back.
+
+2002-12-18 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * threads.c (really_launch): Detach before unlocking
+ thread_admin_mutex in order not to risk being joined.
+ (scm_i_thread_put_to_sleep, scm_i_thread_wake_up): Keep
+ thread_admin_mutex locked during GC.
+
+ * pthread-threads.c, pthread-threads.h: Improvements to debugging
+ functions.
+
+2002-12-16 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * pthread-threads.c, pthread-threads.h (SCM_DEBUG_THREADS): Added
+ support for debugging mutex operations.
+
+ * threads.c (scm_thread): Removed filed joining_threads.
+ (thread_print): Print thread number as well as address of thread
+ structure.
+ (scm_join_thread): Bugfix.
+ (scm_lock_mutex, scm_try_mutex, scm_unlock_mutex,
+ scm_timed_wait_condition_variable, scm_signal_condition_variable,
+ scm_broadcast_condition_variable): Use the low-level API.
+ (scm_all_threads): Return copy of thread list (to prevent
+ unintended destruction).
+ (scm_threads_prehistory): Initialize heap_mutex of fake thread.
+
+ * pthread-threads.c, pthread-threads.h, threads.c: Fixes to
+ pthread "native" recursive mutex support.
+
+2002-12-15 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS): New definitions.
+ Simply lock a thread C API recursive mutex.
+ (SCM_NONREC_CRITICAL_SECTION_START,
+ SCM_NONREC_CRITICAL_SECTION_END, SCM_REC_CRITICAL_SECTION_START,
+ SCM_REC_CRITICAL_SECTION_END): Removed.
+
+ * eval.c: Replaced SOURCE_SECTION_START / SOURCE_SECTION_END with
+ direct calls to scm_rec_mutex_lock / unlock around the three calls
+ to scm_m_expand_body.
+
+ * eval.c, eval.h (promise_free): New function.
+ (scm_force): Rewritten; Now thread-safe; Removed
+ SCM_DEFER/ALLOW_INTS.
+
+ * pthread-threads.h: Added partially implemented plugin interface
+ for recursive mutexes. These are, for now, only intended to be
+ used internally within the Guile implementation.
+
+ * pthread-threads.c: New file.
+
+ * threads.c: Conditionally #include "pthread-threads.c".
+
+ * eval.c, eval.h (scm_makprom, scm_force): Rewritten to be
+ thread-safe;
+
+ * snarf.h (SCM_MUTEX, SCM_GLOBAL_MUTEX, SCM_REC_MUTEX,
+ SCM_GLOBAL_REC_MUTEX): New macros.
+
+ * eval.c, threads.c, threads.h, snarf.h: Rewrote critical section
+ macros---use mutexes instead.
+
+ * tags.h (SCM_IM_FUTURE): New tag.
+
+ * eval.c (scm_m_future): New primitive macro.
+ (SCM_CEVAL): Support futures.
+ (unmemocopy): Support unmemoization of futures.
+
+ * print.c (scm_isymnames): Name of future isym.
+
+ * version.c: Unmade some changes to my private copy that got
+ committed by mistake.
+
+2002-12-11 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * gc-malloc.c, gc.h, init.c: Reverted gc-malloc change of
+ 2002-12-10.
+
+ * gc.c (scm_igc): Don't call scm_i_thread_invalidate_freelists.
+
+ * gc.c (scm_gc_sweep): Call it here instead, which is a more
+ logical place.
+
+ * threads.c (create_thread): Remember root object until the handle
+ of the new thread is on all_threads list.
+
+ * root.c (scm_make_root): Moved copying of fluids until after
+ creation of root handle so that the fluids are GC protected. Also
+ removed the critical section.
+
+2002-12-10 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * gc-malloc.c, gc.h (scm_gc_malloc_prehistory): New function.
+
+ * gc-malloc.c (malloc_mutex): New mutex.
+ (scm_gc_malloc_prehistory): Initialize it.
+ (scm_realloc): Serialize call to realloc
+ (scm_calloc): Same for calloc.
+ Thanks to Wolfgang Jaehrling!
+ (Now we have to make sure all calls to malloc/realloc are made
+ through scm_malloc.)
+
+ * init.c (scm_init_guile_1): Call scm_gc_malloc_prehistory.
+
+ * threads.c (really_launch): Release heap (to prevent deadlock).
+ (create_thread): Release heap before locking thread admin mutex.
+
+2002-12-10 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * threads.c (scm_i_thread_invalidate_freelists): New
+ function.
+
+ * gc.c (scm_igc): Call scm_i_thread_invalidate_freelists.
+
+ * modules.c (scm_export): Inserted a return statement.
+
+2002-12-10 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * modules.c (scm_export): new function
+
+ * gc-card.c: add a note about malloc()/free() overhead.
+
+2002-12-10 Mikael Djurfeldt <mdj@kvast.blakulla.net>
+
+ * Makefile.am (c-tokenize.$(OBJEXT)): Don't look for c-tokenize.c
+ in srcdir.
+
+2002-12-10 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ These changes remove scm_ints_disabled (which hasn't has any
+ effect in Guile for quite some time).
+
+ * async.c, error.h (scm_ints_disabled): Removed.
+
+ * gc.c (scm_gc_for_newcell), init.c (scm_init_guile_1),
+ root.c (scm_internal_cwdr), gdbint.c (SCM_BEGIN_FOREIGN_BLOCK,
+ SCM_END_FOREIGN_BLOCK): Don't touch scm_ints_disabled.
+ (old_ints): Removed.
+
+ * __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS): Define as a recursive
+ critical section.
+ (SCM_REDEFER_INTS, SCM_ALLOW_INTS): Define as SCM_DEFER_INTS and
+ SCM_ALLOW_INTS.
+
+2002-12-09 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * threads.c (scm_mutex_lock, scm_cond_wait, scm_cond_timedwait):
+ Removed accidental #if 0 around these functions.
+
+ These changes are the start of support for preemptive
+ multithreading. Marius and I have agreed that I commit this code
+ into the repository although it isn't thoroughly tested and surely
+ introduces many bugs. The bugs should only be exposed when using
+ threads, though. Signalling and error handling for threads is
+ very likely broken. Work on making the implementation cleaner and
+ more efficient is needed.
+
+ * __scm.h (SCM_ALLOW_INTS_ONLY): Removed.
+ (SCM_NONREC_CRITICAL_SECTION_START,
+ SCM_NONREC_CRITICAL_SECTION_END, SCM_REC_CRITICAL_SECTION_START,
+ SCM_REC_CRITICAL_SECTION_END): New macros.
+ (SCM_CRITICAL_SECTION_START/END): Defined here.
+
+ * eval.c: Insert SOURCE_SECTION_START / SOURCE_SECTION_END around
+ the three calls to scm_m_expand_body.
+
+ * gc.h: #include "libguile/pthread-threads.h";
+ (SCM_FREELIST_CREATE, SCM_FREELIST_LOC): New macros.
+
+ * gc.c (scm_i_freelist, scm_i_freelist2): Defined to be of type
+ scm_t_key;
+
+ * gc.c, gc-freelist.c, inline.h: Use SCM_FREELIST_LOC for freelist
+ access.
+
+ * gc-freelist.c (scm_gc_init_freelist): Create freelist keys.
+
+ * gc-freelist.c, threads.c (really_launch): Use
+ SCM_FREELIST_CREATE.
+
+ * gc-malloc.c (scm_realloc, scm_gc_register_collectable_memory):
+
+ * gc.c (scm_i_expensive_validation_check, scm_gc,
+ scm_gc_for_newcell): Put threads to sleep before doing GC-related
+ heap administration so that those pieces of code are executed
+ single-threaded. We might consider rewriting these code sections
+ in terms of a "call_gc_code_singly_threaded" construct instead of
+ calling the pair of scm_i_thread_put_to_sleep () and
+ scm_i_thread_wake_up (). Also, we would want to have as many of
+ these sections eleminated.
+
+ * init.c (scm_init_guile_1): Call scm_threads_prehistory.
+
+ * inline.h: #include "libguile/threads.h"
+
+ * pthread-threads.h: Macros now conform more closely to the
+ pthreads interface. Some of them now take a second argument.
+
+ * threads.c, threads.h: Many changes.
+
+2002-12-09 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * Makefile.am (version.h): Changed $^ --> $< in rule for
+ version.h.
+
+2002-12-08 Rob Browning <rlb@defaultvalue.org>
+
+ * version.h.in (SCM_MICRO_VERSION): use @--@ substitution now.
+ (SCM_MINOR_VERSION): use @--@ substitution now.
+ (SCM_MICRO_VERSION): use @--@ substitution now.
+ (scm_effective_version): new function prototype.
+
+ * version.c (scm_effective_version): new function, also add
+ effective-version.
+
+ * Makefile.am (schemelibdir): VERSION -> GUILE_EFFECTIVE_VERSION.
+ (libpath.h): use GUILE_EFFECTIVE_VERSION to compute
+ SCM_LIBRARY_DIR.
+ (version.h): generate this here rather than configure.in. This
+ approach tracks source edits better (i.e. more immediately).
+ Might be worth considering for other .in files too.
+
+2002-12-02 Marius Vollmer <mvo@zagadka.ping.de>
+
+ Reorganized thread package selection. A thread package now only
+ implements a small set of pthread like functions and Guile
+ implements the rest on top of that. Guile's implementation is
+ what the "coop-pthreads" package has been previously. Support for
+ "coop" threads has been removed until I get time to add it again.
+
+ * Makefile.am (libguile_la_SOURCES): Removed iselect.c.
+ (noinst_HEADERS): Removed coop-threads.c, coop-threads.h, coop.c,
+ null-threads.c, coop-pthreads.c.
+ (modinclude_HEADERS): Removed coop-defs.h, coop-pthreads.h. Added
+ pthread-threads.h.
+
+ * validate.h (SCM_VALIDATE_THREAD): Moved to threads.h.
+
+ * threads.h: Do not include "libguile/coop-defs.h". Include
+ "libguile/pthread-threads.h" for USE_COPT_THREADS. Removed
+ (previously deprecated) C level thread API prototypes. They are
+ now in the thread package specific headers, "null-threads.h" and
+ "pthread-threads.h".
+ (SCM_VALIDATE_THREAD, SCM_VALIDATE_MUTEX, SCM_VALIDATE_CONDVAR):
+ New.
+ (scm_threads_init): Removed.
+ (SCM_CRITICAL_SECTION_START, SCM_CRITICAL_SECTION_END,
+ SCM_THREAD_SWITCHING_CODE, scm_i_switch_counter,
+ SCM_I_THREAD_SWITCH_COUNT): Define here.
+ (scm_single_thread_p): Removed.
+ (scm_call_with_new_thread): Take two args directly instead of list
+ of two args.
+ (scm_i_thread_data, scm_i_set_thread_data, SCM_THREAD_LOCAL_DATA,
+ SCM_SET_THREAD_LOCAL_DATA): Define here.
+
+ * threads.c: Merged with "coop-pthreads.c".
+
+ * null-threads.h: Implement pthread-like API as a set of macros.
+
+ * pthread-threads.h: New, implement pthread-like API by deferring
+ to pthread itself.
+
+ * init.c (scm_init_guile_1): Do not call scm_init_iselect, which
+ has been lost in the reorganization.
+
+2002-12-01 Mikael Djurfeldt <mdj@linnaeus>
+
+ The following change makes it possible to move procedure
+ application dispatch outside inner loops. The motivation was
+ clean implementation of efficient replacements of R5RS primitives
+ in SRFI-1.
+
+ The semantics is clear: scm_trampoline_N returns an optimized
+ version of scm_call_N (or NULL if the procedure isn't applicable
+ on N args).
+
+ Applying the optimization to map and for-each increases efficiency
+ noticeably. For example, (map abs ls) is 8 times faster than
+ before.
+
+ * eval.h (scm_t_trampoline_1, scm_t_trampoline_2): New types.
+
+ * eval.c, eval.h (scm_trampoline_1, scm_trampoline_2): New functions.
+
+ * eval.c (call_subr2_2, call_lsubr_2, call_closure_2): New functions;
+ (map, for-each): Handle also application on two args as a special
+ case; Use trampolines.
+
+ Other changes:
+
+ * sort.c (scm_cmp_function): Choose subr2less for scm_tc7_subr_2o;
+ (subr2oless): Removed.
+ (scm_restricted_vector_sort_x): Use scm_return_first to keep the
+ vector GC protected.
+
+ * eval.c (check_map_args): Use scm_out_of_range_pos instead of
+ scm_out_of_range.
+
+2002-11-24 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * evalext.[ch] (scm_m_undefine, undefine): Deprecated.
+
+2002-11-17 Mikael Djurfeldt <mdj@linnaeus>
+
+ * debug.c (scm_make_iloc): Added missing "return".
+
+2002-11-17 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * strports.c (scm_eval_string_in_module): Validate second arg to
+ be a module. Thanks to Arno Peters!
+
+2002-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * .cvsignore: remove goops.c
+
+2002-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * modules.c (scm_env_top_level, scm_lookup_closure_module,
+ module_variable, scm_module_lookup_closure,
+ scm_module_transformer, scm_sym2var, scm_module_reverse_lookup,
+ scm_system_module_env_p): Don't compare SCM values with C
+ operators == or !=. Avoid SCM_IMP predicates. Prefer !SCM_FALSEP
+ over SCM_NFALSEP.
+
+2002-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * eval.h (SCM_MAKE_ILOC): New macro.
+
+ * debug.c (scm_make_iloc): Use SCM_MAKE_ILOC instead of computing
+ the iloc bitpattern here.
+
+2002-11-14 Mikael Djurfeldt <mdj@linnaeus>
+
+ * coop-pthreads.c, coop-pthreads.h: scm_internal_select should be
+ part of the API, otherwise it's difficult to write Guile
+ extensions using non-blocking I/O => moved #include
+ "libguile/iselect.h" from coop-pthreads.c --> coop-pthreads.h.
+
+ * coop-pthreads.c (scm_unlock_mutex): Changed s_lock_mutex -->
+ s_unlock_mutex.
+
+2002-11-10 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * __scm.h (USE_THREADS, GUILE_ISELECT): Do not define here. They
+ are defined in configure.in.
+
+ * threads.c: Removed SCM_API from function definitions. SCM_API
+ is only for declarations.
+
+2002-11-07 Mikael Djurfeldt <mdj@linnaeus>
+
+ * coop-pthreads.h: Added support for thread specific data to the
+ generic C API for the coop-pthreads case.
+
+ * threads.c, threads.h (scm_cond_init): Undo unintentional API
+ change.
+ (scm_cond_broadcast): Added missing function.
+
+2002-11-04 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * coop.c (coop_next_runnable_thread): Removed, wich should have
+ happened when GUILE_ISELECT was hard-wired.
+
+2002-11-03 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * Makefile.am (libguile_la_SOURCES): Added threads.c
+ (DOT_DOC_FILES): Added threads.doc.
+ (DOT_X_FILES): Added threads.x.
+ (EXTRA_libguile_la_SOURCES): Removed threads.c.
+ (noinst_HEADERS): Added coop-pthreads.c.
+ (modinclude_HEADERS): Added coop-pthreads.h.
+
+ * __scm.h (USE_THREADS, GUILE_ISELECT): Define when
+ SCM_DEBUG_DEPRECATED. Removed their use thru-out Guile.
+
+ * iselect.c: Include "_scm.h" before testing HAVE_UNISTD_H.
+ Thanks to Bill Schottstaedt!
+
+ * numbers.c (scm_integer_expt): Make 0^z == 0 for z != 0.
+
+ * _scm.h (HAVE_RESTARTABLE_SYSCALLS): Do define even when
+ SCM_COPT_THREADS is defined.
+ (SCM_SYSCALL): Use EINTR-expection version when SCM_COPT_THREADS
+ is defined.
+
+ * coop-pthreads.c: Some harmless renamings of internal stuff.
+ (create_thread): New, generalized version of
+ scm_call_with_new_thread.
+ (scm_call_with_new_thread): Use it.
+ (scm_spawn_thread): New, use create_thread.
+
+2002-11-02 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * coop-pthreads.c, coop-pthreads.h: Redone completely, you might
+ start testing it now.
+
+ * _scm.h: Include <errno.h< so that SCM_SYSCALL is correctly
+ defined when HAVE_RESTARTABLE_SYSCALLS is not defined.
+ (HAVE_RESTARTABLE_SYSCALLS): Do not define when USE_COPT_THREADS
+ is defined.
+
+2002-10-27 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * scmsigs.c (signal_cell_handlers, install_handler_data,
+ scm_delq_spine_x, really_install_handler, install_handler): New
+ scheme for triggering signal handlers, to simplify take_signal.
+ (take_signal): Simplified, to avoid race conditions.
+ (scm_sigaction_for_thread): Use new Scheme. Validate that thread
+ hasn't exited yet.
+
+ * async.c (scm_async_click): Reset pending_asyncs, handle
+ signal_asyncs. Don't set cdr of a non-signal async to #f.
+ (scm_i_queue_async_cell): Do not check cdr of cell for #f, queue
+ always. Set pending_asyncs.
+ (scm_system_async_mark_for_thread): Check that thread has not
+ exited.
+ (scm_unmask_signals, decrease_block): Call scm_async_click after
+ block_asyncs becomes zero.
+
+ * __scm.h (SCM_ASYNC_CLICK): Check pending_asyncs instead of
+ active_asyncs.
+
+ * root.h (scm_root_state): Added pending_asyncs and signal_asyncs
+ fields.
+ * root.c (root_mark): Mark them.
+ (make_root): Initialize them.
+
+ * iselect.c, iselect.h: Replaced GUILE_ISELECT with
+ USE_COOP_THREADS.
+ (scm_internal_select): Define one version for USE_COOP_THREADS and
+ one for USE_NULL_THREADS.
+ (scm_init_iselect): Likewise.
+
+ * inline.h (scm_cell, scm_double_cell): Also allow
+ USE_COPT_THREADS to not protect the slot initializers.
+
+ * init.c (scm_init_guile_1): Call scm_init_thread_procs. This is
+ because threads need to be initialized before the stack, but
+ gsubrs such as scm_timed_condition_variable_wait can only be
+ created later.
+
+ * threads.h: Include "coop-pthreads.h" when requested.
+ (scm_threads_make_mutex, scm_threads_lock_mutex,
+ scm_threads_unlock_mutex, scm_threads_monitor): Removed, they were
+ not implemented anyway.
+ (scm_init_thread_procs, scm_try_mutex,
+ scm_timed_condition_variable_wait,
+ scm_broadcast_condition_variable, scm_c_thread_exited_p,
+ scm_thread_exited_p): New prototypes.
+ (struct timespec): Define if not already defined.
+ (scm_t_mutex, scm_mutex_init, scm_mutex_lock, scm_mutex_trylock,
+ scm_mutex_unlock, scm_mutex_destroy, scm_t_cond, scm_cond_init,
+ scm_cond_wait, scm_cond_timedwait, scm_cond_signal,
+ scm_cond_broadcast, scm_cond_destroy): Declarations moved here and
+ deprecated.
+
+ * threads.c: Include <errno.h>. Include "coop-pthreads.c" when
+ requested.
+ (scm_thread_exited_p): New.
+ (scm_try_mutex, scm_broadcast_condition_variable): Newly
+ registered procedures.
+ (scm_wait_condition_variable, scm_timed_wait_condition_variable):
+ Use the latter as the procedure for "wait-condition-variable",
+ thus offering a optional timeout parameter to Scheme.
+ (scm_wait_condition_variable): Implement in terms of
+ scm_timed_wait_condition_variable.
+ (scm_mutex_init, scm_mutex_lock, scm_mutex_trylock,
+ scm_mutex_unlock, scm_mutex_destroy, scm_cond_init,
+ scm_cond_wait, scm_cond_timedwait, scm_cond_signal,
+ scm_cond_broadcast, scm_cond_destroy): Implement in terms of
+ scm_make_mutex, etc, and deprecate.
+ (scm_init_threads): Do not create smobs, leave this to
+ scm_threads_init. Do not include "threads.x" file.
+ (scm_init_thread_procs): New, include "threads.x" here.
+
+ * null-threads.h (scm_null_mutex, scm_null_mutex_init,
+ scm_null_mutex_lock, scm_null_mutex_unlock,
+ scm_null_mutex_destroy, scm_null_condvar, scm_null_condvar_init,
+ scm_null_condvar_wait, scm_null_condvar_signal,
+ scm_null_condvar_destroy): Removed.
+ (scm_mutex_init, scm_mutex_lock, scm_mutex_unlock, scm_cond_init,
+ scm_cond_wait, scm_cond_signal, scm_cond_broadcast,
+ scm_cond_destory): Do not define, they are now deprecated and
+ handled by threads.{h,c}.
+
+ * null-threads.c (scm_null_mutex, scm_null_cond): Define here.
+ (scm_threads_init): Create smobs here, using the appropriate
+ sizes.
+ (block): Removed, now unused.
+ (scm_c_thread_exited_p): New.
+ (scm_null_mutex_init, scm_null_mutex_lock, scm_null_mutex_unlock,
+ scm_null_mutex_destroy, scm_null_condvar_init,
+ scm_null_condvar_wait, scm_null_condvar_signal,
+ scm_null_condvar_destroy): Removed and updated users to do their
+ task directly.
+ (scm_try_mutex, timeval_subtract,
+ scm_timed_wait_condition_variable,
+ scm_broadcast_condition_variable): New.
+ (scm_wait_condition_variable): Removed.
+
+ * coop-defs.h (coop_m): Added 'level' field.
+ (scm_t_mutex, scm_mutex_init, scm_mutex_lock, scm_mutex_trylock,
+ scm_mutex_unlock, scm_mutex_destroy, scm_t_cond, scm_cond_init,
+ scm_cond_wait, scm_cond_timedwait, scm_cond_signal,
+ scm_cond_broadcast, scm_cond_destroy, struct timespec): Do not
+ define.
+ (coop_condition_variable_broadcast): New.
+
+ * coop-threads.c (scm_threads_init): Create smobs here, using the
+ appropriate sizes.
+ (scm_c_thread_exited_p, scm_try_mutex,
+ scm_timed_wait_condition_variable,
+ scm_broadcast_condition_variable): New.
+ (scm_wait_condition_variable): Removed.
+
+ * coop.c (coop_new_mutex_init): Initialize level.
+ (coop_mutex_trylock, coop_mutex_lock, coop_mutex_unlock): maintain
+ level.
+ (coop_condition_variable_signal): Renamed to
+ coop_condition_variable_broadcast and reimplemented in terms of
+ that. Thus...
+ (coop_condition_variable_broadcast): New.
+
+ * goops.c (hell_mutex): Reimplemented using scm_make_mutex, etc.
+
+ * coop-pthreads.h, coop-pthreads.c: New, but unfinished.
+
+2002-10-21 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * null-threads.c: Include <time.h>. Also, use <...> for inclusion
+ of system headers.
+
+ * async.c, goops.h, modules.h, validate.h (SCM_MAKE_VALIDATE_MSG):
+ New. Use it instead of SCM_MAKE_VALIDATE in lots of places to
+ give better error messages. Thanks to Bill Schottstaedt!
+
+2002-10-19 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * evalext.h, evalext.c (scm_definedp, scm_defined_p): Renamed
+ scm_definedp to scm_defined_p and deprecated scm_definedp.
+
+2002-10-19 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * async.h, async.c (scm_system_async): Fixed deprecation to work
+ correctly when deprecated features are excluded.
+
+2002-10-16 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * async.c (scm_system_async_mark_for_thread): Validate thread
+ argument.
+
+ * coop-threads.c (scm_i_thread_root): Do not validate argument.
+
+ * feature.c (scm_init_feature): Don't add 'threads' for
+ USE_NULL_THREADS.
+
+ * inline.h (scm_cell, scm_double_cell): Also allow
+ USE_NULL_THREADS to not protect the slot initializers.
+
+ * scmsigs.c (scm_sigaction_for_thread): It's "USE_THREADS" not
+ "USE_THREAD".
+
+ * Makefile.am (noinst_HEADERS): Added null-threads.c.
+ (modinclude_HEADERS): Added null-threads.h.
+
+ * threads.h: Include null-threads.h when !USE_COOP_THREADS.
+ * threads.c: Include null-threads.c when !USE_COOP_THREADS.
+ (scm_init_threads): Use generic type names scm_t_mutex and
+ scm_t_cond instead of coop_m and coop_c.
+
+ * null-threads.c, null-threads.h: New files.
+
+2002-10-15 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * Makefile.am: Replaced "$<" in non-pattern rules with its value.
+ This is to support makes that know about "$<" only in pattern
+ rules, like Sun's make.
+
+2002-10-13 Marius Vollmer <mvo@zagadka.ping.de>
+
+ * Makefile.am (libpath.h): Fixed typo in top_srcdir_absolute
+ substitution. Thanks to David Allouche!
+
+2002-10-13 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * evalext.h: Replaced SCM_DEBUG_DEPRECATED with
+ !SCM_ENABLE_DEPRECATED.
+
+2002-10-11 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * async.c (scm_system_async_mark_for_thread): Only call
+ scm_i_thread_root when USE_THREADS is defined. Use scm_root
+ otherwise.
+
+ * scmsigs.c (take_signal): Only call scm_i_thread_root when
+ USE_THREADS is defined. Use scm_root otherwise.
+ (scm_sigaction_for_thread): Ignore THREAD argument when
+ USE_THREADS is not defined. Also, move THREAD argument defaulting
+ out of HAVE_SIGACTION section, which was a bug.
+
2002-10-10 Marius Vollmer <marius.vollmer@uni-dortmund.de>
* scmsigs.c (scm_sigaction_for_thread): Store original handler in
* Makefile.am (libguile_la_LIBADD): switch to use
libguile-ltdl.la.
- * numbers.c (s_scm_integer_expt): (expt 0 1) should be 1.
+ * numbers.c (scm_integer_expt): (expt 0 1) should be 1.
2002-10-04 Marius Vollmer <mvo@zagadka.ping.de>
scm_add_to_port_table. This prevents cells with null-pointers from
being exposed to GC.
- * vports.c (s_scm_make_soft_port) strports.c (scm_mkstrport),
+ * vports.c (scm_make_soft_port) strports.c (scm_mkstrport),
fports.c (scm_fdes_to_port): Use scm_new_port_table_entry().
- * gc.c (s_scm_gc_stats): add cell-yield and malloc-yield statistic
+ * gc.c (scm_gc_stats): add cell-yield and malloc-yield statistic
to gc-stats.
* numbers.c (big2str): return "0" for 0 iso. ""
* macros.c: include deprecation.h
- * vectors.c (s_scm_vector_move_right_x): remove side effect in
+ * vectors.c (scm_vector_move_right_x): remove side effect in
macro arg.
- (s_scm_vector_move_left_x): idem.
+ (scm_vector_move_left_x): idem.
* net_db.c, posix.c, socket.c: variable naming: change ans to
result.
* goops.h (scm_slot_exists_p): Rename from scm_slots_exists_p.
* goops.c (scm_slot_exists_p): Rename from scm_slots_exists_p.
- (s_scm_slot_exists_p): Rename from s_scm_slots_exists_p.
+ (scm_slot_exists_p): Rename from scm_slots_exists_p.
Thanks to Andreas Rottmann.
2002-04-20 Gary Houston <ghouston@arglist.com>
* socket.c: Include `stdint.h' if available for the `uint32_t'
declaration.
- * scmsigs.c (s_scm_sigaction): Initialize `chandler' (inhibits
+ * scmsigs.c (scm_sigaction): Initialize `chandler' (inhibits
compiler warning).
* backtrace.c: Include `lang.h' for GUILE_DEBUG conditional.