+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
2002-10-11 Marius Vollmer <marius.vollmer@uni-dortmund.de>
- * async.c (s_scm_system_async_mark_for_thread): Only call
+ * async.c (scm_system_async_mark_for_thread): Only call
scm_i_thread_root when USE_THREADS is defined. Use scm_root
otherwise.
* 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.