* Changes to the distribution
-** There is a new thread implementation option "null", which is also
- the default now.
+** There are two new thread implementation options: "null" and
+ "coop-pthreads".
When you configure "--with-threads=null", you will get the usual
threading API (call-with-new-thread, make-mutex, etc), but you can't
is always present, although you might not be able to create new
threads.
-When cooperative threading is not supported on your platform, you will
-get the "null" threads instead.
+The "coop-pthread" (or shorter: "copt") thread implementation will use
+portable POSIX threads but will restrict them so that only one thread
+can execute 'in Guile' at any one time. This option will give you the
+same basic behavior as the old "coop" option, but hopefully in a more
+portable way.
-The long term plan is to make the selection of a thread implementation
-a run-time option, not a configure time option.
+The default is now "coop-pthread", unless your platform doesn't have
+pthreads, in which case "null" threads are used.
** Guile now includes its own version of libltdl.
* Changes to Scheme functions and syntax
+** Mutexes are now recursive.
+
+Locking a mutex that you have already locked will now succeed. Every
+call to lock-mutex must be matched with a call to unlock-mutex. Only
+the last call to unlock-mutex will actually unlock the mutex.
+
+** New function 'try-mutex'.
+
+This function will attempt to lock a mutex but will return immediately
+instead if blocking and indicate failure.
+
+** Waiting on a condition variable can have a timeout.
+
+The funtion 'wait-condition-variable' now takes a third, optional
+argument that specifies the point in time where the waiting should be
+aborted.
+
+** New function 'broadcast-condition-variable'.
+
** New functions 'all-threads' and 'current-thread'.
** Signals and system asyncs work better with threads.
that returns the number of characters that can be read immediately
without the soft port blocking.
+** New debugging feature: breakpoints.
+
+Guile now has breakpoints. For details see the `Debugging Features'
+chapter in the reference manual.
+
+** Deprecated: undefine
+
+There is no replacement for undefine.
+
* Changes to the C interface
+** The function scm_call_with_new_thread has a new prototype.
+
+Instead of taking a list with the thunk and handler, these two
+arguments are now passed directly:
+
+ SCM scm_call_with_new_thread (SCM thunk, SCM handler);
+
+This is an incompatible change.
+
** The value 'scm_mask_ints' is no longer writable.
Previously, you could set scm_mask_ints directly. This is no longer
Full number of arguments checking of closures is mandatory now. However, the
option to disable the checking has most probably not been used anyway.
+** Deprecated configure flags USE_THREADS and GUILE_ISELECT
+
+Previously, when the C preprocessor macro USE_THREADS was defined,
+libguile included a thread API. This API is now always included, even
+when threads are not really supported. Thus, you don't need to test
+for USE_THREADS.
+
+Analogously, GUILE_ISELECT was defined when the function
+scm_internal_select was provided by Guile. This function is now
+always defined, and GUILE_ISELECT with it.
+
** Removed definitions: scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify,
s_t_ify, scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2, scm_tc16_allocated,