* threads.c (scm_timed_wait_condition_variable): Support timed
[bpt/guile.git] / libguile / ChangeLog
index 37b648c..c6fd067 100644 (file)
@@ -1,5 +1,208 @@
+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.