* psyntax.ss (self-evaluating?): Allow procedures implanted in
[bpt/guile.git] / libguile / ChangeLog
CommitLineData
38d8927c
MD
12003-01-10 Mikael Djurfeldt <djurfeldt@nada.kth.se>
2
41c96c32
MD
3 * threads.c (scm_timed_wait_condition_variable): Support timed
4 waiting also for simple condition variables.
5
38d8927c
MD
6 * goops.c (TEST_CHANGE_CLASS): Use scm_change_object_class instead
7 of calling the procedure change-object-class.
8
9cf5d9b7
MD
92003-01-09 Mikael Djurfeldt <djurfeldt@nada.kth.se>
10
11 * ramap.c (scm_ramapc): Typo in error message.
12
bbf8d523
MD
132003-01-08 Mikael Djurfeldt <djurfeldt@nada.kth.se>
14
b46fae00
MD
15 * goops.c (scm_sys_prep_layout_x): Bugfix: Only create layout for
16 slots with instance allocation.
17
bbf8d523
MD
18 * goops.c, goops.h (scm_class_extended_generic_with_setter): New
19 class.
20 (scm_compute_applicable_methods): Use scm_generic_function_methods.
21
22 * goops.c (scm_generic_function_methods): Support extended
23 generic functions.
24
ebf9b47c
MD
252002-12-29 Mikael Djurfeldt <djurfeldt@nada.kth.se>
26
27 * eval.c (unmemocopy): Bugfix: scm_sym_delay --> scm_sym_future.
2e37d6a2 28 Thanks to Neil for pointing this out!
ebf9b47c 29
14a9ba3f
NJ
302002-12-29 Neil Jerram <neil@ossau.uklinux.net>
31
32 * lang.h: Remove declarations matching definitions removed from
33 lang.c (just below).
34
c6a040a8
NJ
352002-12-28 Neil Jerram <neil@ossau.uklinux.net>
36
6054d805
NJ
37 * lang.c (scm_nil_cons, scm_nil_car, scm_nil_cdr, scm_null,
38 scm_m_while, scm_nil_eq): Remove definitions that were superfluous
39 and already commented out.
40
c6a040a8
NJ
41 * read.h (scm_lreadparen), read.c (scm_lreadr, scm_read_token,
42 scm_lreadparen): Support reading vectors with Elisp syntax if
43 SCM_ELISP_READ_EXTENSIONS is defined. (SCM_ELISP_READ_EXTENSIONS
44 is not currently defined, and there isn't even a configure switch
45 to enable it yet.)
46
3742c12f
MV
472002-12-26 Marius Vollmer <mvo@zagadka.ping.de>
48
49 * Makefile.am (c-tokenize.o): Refer to source via $< so that vpath
50 builds work.
51 (EXTRA_DIST): Added version.h.in.
52
fb50ef08
MD
532002-12-21 Mikael Djurfeldt <djurfeldt@nada.kth.se>
54
55 This change makes it possible for one thread to do lazy sweeping
56 while other threads are running. Now only the mark phase need to
57 have all threads asleep. We should look further into this issue.
58 Presently, I've put the locking of scm_i_sweep_mutex at
59 "conservative" places due to my current lack of knowledge about
60 the garbage collector. Please feel free to restrict these regions
61 further to allow for maximal parallelism!
62
63 * gc.c, gc.h (scm_i_sweep_mutex): New mutex.
64
65 * gc.c (scm_gc_for_newcell), gc-malloc.c (scm_realloc,
66 scm_gc_register_collectable_memory): Substitute locking of
67 scm_i_sweep_mutex for calls to scm_i_thread_put_to_sleep.
68 (scm_igc): Lock sweep mutex here instead of in callers; Calls to
69 scm_i_thread_put_to_sleep/scm_i_thread_wake_up used to demarkate
70 the single-thread section (which now only contains the mark
71 phase).
72 (scm_gc): Don't lock sweeo mutex here since scm_igc locks it;
73 Removed SCM_DEFER/ALLOW_INTS. Simply call scm_igc directly.
74
75 * threads.c (gc_section_mutex): Removed.
76
9ed24633
MD
772002-12-19 Mikael Djurfeldt <mdj@kvast.blakulla.net>
78
0d48aca5
MD
79 * threads.c (create_thread): Clear parent field in root state in
80 order not to unnecessarily remember dead threads.
81
9ed24633
MD
82 * eval.c (call_subr2o_1, call_lsubr2_2): New functions.
83 (scm_trampoline_1, scm_trampoline_2): Use them.
84
29717c89
MD
852002-12-18 Mikael Djurfeldt <mdj@kvast.blakulla.net>
86
87 Partial introduction of real plugin interface.
88
89 * Makefile.am (modinclude_HEADERS): Added threads-plugin.h.
90 (EXTRA_DIST): Added threads-plugin.c.
91
92 * threads-plugin.h, threads-plugin.c: New files.
93
94 * threads.h: #include "libguile/threads-plugin.h".
95
96 * threads.c: #include "libguile/threads-plugin.c".
97
98 * pthread-threads.c: Temporarily remove debugging functions.
99
100 * threads.c, threads.h (scm_yield): Added back.
101
e29e0b09
MD
1022002-12-18 Mikael Djurfeldt <mdj@kvast.blakulla.net>
103
104 * threads.c (really_launch): Detach before unlocking
105 thread_admin_mutex in order not to risk being joined.
106 (scm_i_thread_put_to_sleep, scm_i_thread_wake_up): Keep
107 thread_admin_mutex locked during GC.
108
109 * pthread-threads.c, pthread-threads.h: Improvements to debugging
110 functions.
111
0b6843b1 1122002-12-16 Mikael Djurfeldt <mdj@kvast.blakulla.net>
93cd4dcd 113
6da2dfc4
MD
114 * pthread-threads.c, pthread-threads.h (SCM_DEBUG_THREADS): Added
115 support for debugging mutex operations.
116
1b92fb6b
MD
117 * threads.c (scm_thread): Removed filed joining_threads.
118 (thread_print): Print thread number as well as address of thread
119 structure.
0b6843b1
MD
120 (scm_join_thread): Bugfix.
121 (scm_lock_mutex, scm_try_mutex, scm_unlock_mutex,
122 scm_timed_wait_condition_variable, scm_signal_condition_variable,
123 scm_broadcast_condition_variable): Use the low-level API.
124 (scm_all_threads): Return copy of thread list (to prevent
125 unintended destruction).
126 (scm_threads_prehistory): Initialize heap_mutex of fake thread.
1b92fb6b 127
93cd4dcd
MD
128 * pthread-threads.c, pthread-threads.h, threads.c: Fixes to
129 pthread "native" recursive mutex support.
130
2ff4f181
MD
1312002-12-15 Mikael Djurfeldt <djurfeldt@nada.kth.se>
132
28d52ebb
MD
133 * __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS): New definitions.
134 Simply lock a thread C API recursive mutex.
135 (SCM_NONREC_CRITICAL_SECTION_START,
136 SCM_NONREC_CRITICAL_SECTION_END, SCM_REC_CRITICAL_SECTION_START,
137 SCM_REC_CRITICAL_SECTION_END): Removed.
138
139 * eval.c: Replaced SOURCE_SECTION_START / SOURCE_SECTION_END with
140 direct calls to scm_rec_mutex_lock / unlock around the three calls
141 to scm_m_expand_body.
142
143 * eval.c, eval.h (promise_free): New function.
144 (scm_force): Rewritten; Now thread-safe; Removed
145 SCM_DEFER/ALLOW_INTS.
146
147 * pthread-threads.h: Added partially implemented plugin interface
148 for recursive mutexes. These are, for now, only intended to be
149 used internally within the Guile implementation.
150
151 * pthread-threads.c: New file.
152
153 * threads.c: Conditionally #include "pthread-threads.c".
154
155 * eval.c, eval.h (scm_makprom, scm_force): Rewritten to be
156 thread-safe;
157
158 * snarf.h (SCM_MUTEX, SCM_GLOBAL_MUTEX, SCM_REC_MUTEX,
159 SCM_GLOBAL_REC_MUTEX): New macros.
160
161 * eval.c, threads.c, threads.h, snarf.h: Rewrote critical section
162 macros---use mutexes instead.
163
164 * tags.h (SCM_IM_FUTURE): New tag.
165
166 * eval.c (scm_m_future): New primitive macro.
167 (SCM_CEVAL): Support futures.
168 (unmemocopy): Support unmemoization of futures.
169
170 * print.c (scm_isymnames): Name of future isym.
171
2ff4f181
MD
172 * version.c: Unmade some changes to my private copy that got
173 committed by mistake.
174
392d2833
MD
1752002-12-11 Mikael Djurfeldt <mdj@kvast.blakulla.net>
176
e200ddee
MD
177 * gc-malloc.c, gc.h, init.c: Reverted gc-malloc change of
178 2002-12-10.
179
392d2833
MD
180 * gc.c (scm_igc): Don't call scm_i_thread_invalidate_freelists.
181
182 * gc.c (scm_gc_sweep): Call it here instead, which is a more
183 logical place.
184
185 * threads.c (create_thread): Remember root object until the handle
186 of the new thread is on all_threads list.
187
188 * root.c (scm_make_root): Moved copying of fluids until after
189 creation of root handle so that the fluids are GC protected. Also
190 removed the critical section.
191
c4c52ebe
MD
1922002-12-10 Mikael Djurfeldt <mdj@kvast.blakulla.net>
193
960c408c
MD
194 * gc-malloc.c, gc.h (scm_gc_malloc_prehistory): New function.
195
3cdde9d6 196 * gc-malloc.c (malloc_mutex): New mutex.
960c408c 197 (scm_gc_malloc_prehistory): Initialize it.
3cdde9d6
MD
198 (scm_realloc): Serialize call to realloc
199 (scm_calloc): Same for calloc.
200 Thanks to Wolfgang Jaehrling!
201 (Now we have to make sure all calls to malloc/realloc are made
202 through scm_malloc.)
203
960c408c
MD
204 * init.c (scm_init_guile_1): Call scm_gc_malloc_prehistory.
205
c4c52ebe
MD
206 * threads.c (really_launch): Release heap (to prevent deadlock).
207 (create_thread): Release heap before locking thread admin mutex.
208
b0dc3d71
MD
2092002-12-10 Mikael Djurfeldt <mdj@kvast.blakulla.net>
210
211 * threads.c (scm_i_thread_invalidate_freelists): New
212 function.
213
214 * gc.c (scm_igc): Call scm_i_thread_invalidate_freelists.
215
216 * modules.c (scm_export): Inserted a return statement.
217
06e80f59
HWN
2182002-12-10 Han-Wen Nienhuys <hanwen@cs.uu.nl>
219
220 * modules.c (scm_export): new function
221
222 * gc-card.c: add a note about malloc()/free() overhead.
223
a12611c3
MD
2242002-12-10 Mikael Djurfeldt <mdj@kvast.blakulla.net>
225
226 * Makefile.am (c-tokenize.$(OBJEXT)): Don't look for c-tokenize.c
227 in srcdir.
228
c7fabadf
MD
2292002-12-10 Mikael Djurfeldt <djurfeldt@nada.kth.se>
230
231 These changes remove scm_ints_disabled (which hasn't has any
232 effect in Guile for quite some time).
233
234 * async.c, error.h (scm_ints_disabled): Removed.
235
236 * gc.c (scm_gc_for_newcell), init.c (scm_init_guile_1),
237 root.c (scm_internal_cwdr), gdbint.c (SCM_BEGIN_FOREIGN_BLOCK,
238 SCM_END_FOREIGN_BLOCK): Don't touch scm_ints_disabled.
239 (old_ints): Removed.
240
241 * __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS): Define as a recursive
242 critical section.
243 (SCM_REDEFER_INTS, SCM_ALLOW_INTS): Define as SCM_DEFER_INTS and
244 SCM_ALLOW_INTS.
245
9bc4701c
MD
2462002-12-09 Mikael Djurfeldt <djurfeldt@nada.kth.se>
247
52340b65
MD
248 * threads.c (scm_mutex_lock, scm_cond_wait, scm_cond_timedwait):
249 Removed accidental #if 0 around these functions.
250
9bc4701c
MD
251 These changes are the start of support for preemptive
252 multithreading. Marius and I have agreed that I commit this code
253 into the repository although it isn't thoroughly tested and surely
254 introduces many bugs. The bugs should only be exposed when using
255 threads, though. Signalling and error handling for threads is
256 very likely broken. Work on making the implementation cleaner and
257 more efficient is needed.
258
259 * __scm.h (SCM_ALLOW_INTS_ONLY): Removed.
260 (SCM_NONREC_CRITICAL_SECTION_START,
261 SCM_NONREC_CRITICAL_SECTION_END, SCM_REC_CRITICAL_SECTION_START,
262 SCM_REC_CRITICAL_SECTION_END): New macros.
263 (SCM_CRITICAL_SECTION_START/END): Defined here.
264
265 * eval.c: Insert SOURCE_SECTION_START / SOURCE_SECTION_END around
266 the three calls to scm_m_expand_body.
267
268 * gc.h: #include "libguile/pthread-threads.h";
269 (SCM_FREELIST_CREATE, SCM_FREELIST_LOC): New macros.
270
271 * gc.c (scm_i_freelist, scm_i_freelist2): Defined to be of type
272 scm_t_key;
273
274 * gc.c, gc-freelist.c, inline.h: Use SCM_FREELIST_LOC for freelist
275 access.
276
277 * gc-freelist.c (scm_gc_init_freelist): Create freelist keys.
278
279 * gc-freelist.c, threads.c (really_launch): Use
280 SCM_FREELIST_CREATE.
281
282 * gc-malloc.c (scm_realloc, scm_gc_register_collectable_memory):
283
284 * gc.c (scm_i_expensive_validation_check, scm_gc,
285 scm_gc_for_newcell): Put threads to sleep before doing GC-related
286 heap administration so that those pieces of code are executed
287 single-threaded. We might consider rewriting these code sections
288 in terms of a "call_gc_code_singly_threaded" construct instead of
289 calling the pair of scm_i_thread_put_to_sleep () and
290 scm_i_thread_wake_up (). Also, we would want to have as many of
291 these sections eleminated.
292
293 * init.c (scm_init_guile_1): Call scm_threads_prehistory.
294
295 * inline.h: #include "libguile/threads.h"
296
297 * pthread-threads.h: Macros now conform more closely to the
298 pthreads interface. Some of them now take a second argument.
299
300 * threads.c, threads.h: Many changes.
301
3022002-12-09 Mikael Djurfeldt <djurfeldt@nada.kth.se>
303
304 * Makefile.am (version.h): Changed $^ --> $< in rule for
305 version.h.
306
b2cbe8d8
RB
3072002-12-08 Rob Browning <rlb@defaultvalue.org>
308
309 * version.h.in (SCM_MICRO_VERSION): use @--@ substitution now.
310 (SCM_MINOR_VERSION): use @--@ substitution now.
311 (SCM_MICRO_VERSION): use @--@ substitution now.
312 (scm_effective_version): new function prototype.
313
314 * version.c (scm_effective_version): new function, also add
315 effective-version.
316
317 * Makefile.am (schemelibdir): VERSION -> GUILE_EFFECTIVE_VERSION.
318 (libpath.h): use GUILE_EFFECTIVE_VERSION to compute
319 SCM_LIBRARY_DIR.
320 (version.h): generate this here rather than configure.in. This
321 approach tracks source edits better (i.e. more immediately).
322 Might be worth considering for other .in files too.
323
5441c65c
MV
3242002-12-02 Marius Vollmer <mvo@zagadka.ping.de>
325
326 Reorganized thread package selection. A thread package now only
327 implements a small set of pthread like functions and Guile
328 implements the rest on top of that. Guile's implementation is
329 what the "coop-pthreads" package has been previously. Support for
330 "coop" threads has been removed until I get time to add it again.
331
332 * Makefile.am (libguile_la_SOURCES): Removed iselect.c.
333 (noinst_HEADERS): Removed coop-threads.c, coop-threads.h, coop.c,
334 null-threads.c, coop-pthreads.c.
335 (modinclude_HEADERS): Removed coop-defs.h, coop-pthreads.h. Added
336 pthread-threads.h.
337
338 * validate.h (SCM_VALIDATE_THREAD): Moved to threads.h.
339
340 * threads.h: Do not include "libguile/coop-defs.h". Include
341 "libguile/pthread-threads.h" for USE_COPT_THREADS. Removed
342 (previously deprecated) C level thread API prototypes. They are
343 now in the thread package specific headers, "null-threads.h" and
344 "pthread-threads.h".
345 (SCM_VALIDATE_THREAD, SCM_VALIDATE_MUTEX, SCM_VALIDATE_CONDVAR):
346 New.
347 (scm_threads_init): Removed.
348 (SCM_CRITICAL_SECTION_START, SCM_CRITICAL_SECTION_END,
349 SCM_THREAD_SWITCHING_CODE, scm_i_switch_counter,
350 SCM_I_THREAD_SWITCH_COUNT): Define here.
351 (scm_single_thread_p): Removed.
352 (scm_call_with_new_thread): Take two args directly instead of list
353 of two args.
354 (scm_i_thread_data, scm_i_set_thread_data, SCM_THREAD_LOCAL_DATA,
355 SCM_SET_THREAD_LOCAL_DATA): Define here.
356
357 * threads.c: Merged with "coop-pthreads.c".
358
359 * null-threads.h: Implement pthread-like API as a set of macros.
360
361 * pthread-threads.h: New, implement pthread-like API by deferring
362 to pthread itself.
363
364 * init.c (scm_init_guile_1): Do not call scm_init_iselect, which
365 has been lost in the reorganization.
366
504d99c5
MD
3672002-12-01 Mikael Djurfeldt <mdj@linnaeus>
368
369 The following change makes it possible to move procedure
370 application dispatch outside inner loops. The motivation was
371 clean implementation of efficient replacements of R5RS primitives
372 in SRFI-1.
373
374 The semantics is clear: scm_trampoline_N returns an optimized
375 version of scm_call_N (or NULL if the procedure isn't applicable
376 on N args).
377
378 Applying the optimization to map and for-each increases efficiency
379 noticeably. For example, (map abs ls) is 8 times faster than
380 before.
381
382 * eval.h (scm_t_trampoline_1, scm_t_trampoline_2): New types.
383
384 * eval.c, eval.h (scm_trampoline_1, scm_trampoline_2): New functions.
385
386 * eval.c (call_subr2_2, call_lsubr_2, call_closure_2): New functions;
387 (map, for-each): Handle also application on two args as a special
388 case; Use trampolines.
389
390 Other changes:
391
392 * sort.c (scm_cmp_function): Choose subr2less for scm_tc7_subr_2o;
393 (subr2oless): Removed.
394 (scm_restricted_vector_sort_x): Use scm_return_first to keep the
395 vector GC protected.
396
397 * eval.c (check_map_args): Use scm_out_of_range_pos instead of
398 scm_out_of_range.
399
63dd3413
DH
4002002-11-24 Dirk Herrmann <D.Herrmann@tu-bs.de>
401
402 * evalext.[ch] (scm_m_undefine, undefine): Deprecated.
403
4ba5f279
MD
4042002-11-17 Mikael Djurfeldt <mdj@linnaeus>
405
406 * debug.c (scm_make_iloc): Added missing "return".
407
56ae231f
MV
4082002-11-17 Marius Vollmer <mvo@zagadka.ping.de>
409
410 * strports.c (scm_eval_string_in_module): Validate second arg to
411 be a module. Thanks to Arno Peters!
412
80b28865
DH
4132002-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
414
415 * .cvsignore: remove goops.c
416
c88b1456
DH
4172002-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
418
419 * modules.c (scm_env_top_level, scm_lookup_closure_module,
420 module_variable, scm_module_lookup_closure,
421 scm_module_transformer, scm_sym2var, scm_module_reverse_lookup,
422 scm_system_module_env_p): Don't compare SCM values with C
423 operators == or !=. Avoid SCM_IMP predicates. Prefer !SCM_FALSEP
424 over SCM_NFALSEP.
425
a8a19efc
DH
4262002-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
427
428 * eval.h (SCM_MAKE_ILOC): New macro.
429
430 * debug.c (scm_make_iloc): Use SCM_MAKE_ILOC instead of computing
431 the iloc bitpattern here.
432
76734914
MD
4332002-11-14 Mikael Djurfeldt <mdj@linnaeus>
434
435 * coop-pthreads.c, coop-pthreads.h: scm_internal_select should be
436 part of the API, otherwise it's difficult to write Guile
437 extensions using non-blocking I/O => moved #include
438 "libguile/iselect.h" from coop-pthreads.c --> coop-pthreads.h.
439
440 * coop-pthreads.c (scm_unlock_mutex): Changed s_lock_mutex -->
441 s_unlock_mutex.
442
8b5b4a75
MV
4432002-11-10 Marius Vollmer <mvo@zagadka.ping.de>
444
445 * __scm.h (USE_THREADS, GUILE_ISELECT): Do not define here. They
446 are defined in configure.in.
447
448 * threads.c: Removed SCM_API from function definitions. SCM_API
449 is only for declarations.
450
e5a83084
MD
4512002-11-07 Mikael Djurfeldt <mdj@linnaeus>
452
9be8bb45
MD
453 * coop-pthreads.h: Added support for thread specific data to the
454 generic C API for the coop-pthreads case.
455
e5a83084
MD
456 * threads.c, threads.h (scm_cond_init): Undo unintentional API
457 change.
6c214b62 458 (scm_cond_broadcast): Added missing function.
e5a83084 459
7edf178e
MV
4602002-11-04 Marius Vollmer <marius.vollmer@uni-dortmund.de>
461
462 * coop.c (coop_next_runnable_thread): Removed, wich should have
463 happened when GUILE_ISELECT was hard-wired.
464
7f5b1b77
MV
4652002-11-03 Marius Vollmer <mvo@zagadka.ping.de>
466
7caa1b07
MV
467 * Makefile.am (libguile_la_SOURCES): Added threads.c
468 (DOT_DOC_FILES): Added threads.doc.
469 (DOT_X_FILES): Added threads.x.
470 (EXTRA_libguile_la_SOURCES): Removed threads.c.
471 (noinst_HEADERS): Added coop-pthreads.c.
472 (modinclude_HEADERS): Added coop-pthreads.h.
473
474 * __scm.h (USE_THREADS, GUILE_ISELECT): Define when
475 SCM_DEBUG_DEPRECATED. Removed their use thru-out Guile.
476
bb11cbf4
MV
477 * iselect.c: Include "_scm.h" before testing HAVE_UNISTD_H.
478 Thanks to Bill Schottstaedt!
479
1d4cbbed
MV
480 * numbers.c (scm_integer_expt): Make 0^z == 0 for z != 0.
481
7f5b1b77
MV
482 * _scm.h (HAVE_RESTARTABLE_SYSCALLS): Do define even when
483 SCM_COPT_THREADS is defined.
484 (SCM_SYSCALL): Use EINTR-expection version when SCM_COPT_THREADS
485 is defined.
486
487 * coop-pthreads.c: Some harmless renamings of internal stuff.
488 (create_thread): New, generalized version of
489 scm_call_with_new_thread.
490 (scm_call_with_new_thread): Use it.
491 (scm_spawn_thread): New, use create_thread.
492
d52f53b1
MV
4932002-11-02 Marius Vollmer <mvo@zagadka.ping.de>
494
495 * coop-pthreads.c, coop-pthreads.h: Redone completely, you might
496 start testing it now.
497
498 * _scm.h: Include <errno.h< so that SCM_SYSCALL is correctly
499 defined when HAVE_RESTARTABLE_SYSCALLS is not defined.
500 (HAVE_RESTARTABLE_SYSCALLS): Do not define when USE_COPT_THREADS
501 is defined.
502
30f920c3
MV
5032002-10-27 Marius Vollmer <mvo@zagadka.ping.de>
504
505 * scmsigs.c (signal_cell_handlers, install_handler_data,
506 scm_delq_spine_x, really_install_handler, install_handler): New
507 scheme for triggering signal handlers, to simplify take_signal.
508 (take_signal): Simplified, to avoid race conditions.
509 (scm_sigaction_for_thread): Use new Scheme. Validate that thread
510 hasn't exited yet.
511
512 * async.c (scm_async_click): Reset pending_asyncs, handle
513 signal_asyncs. Don't set cdr of a non-signal async to #f.
514 (scm_i_queue_async_cell): Do not check cdr of cell for #f, queue
515 always. Set pending_asyncs.
516 (scm_system_async_mark_for_thread): Check that thread has not
517 exited.
518 (scm_unmask_signals, decrease_block): Call scm_async_click after
519 block_asyncs becomes zero.
520
521 * __scm.h (SCM_ASYNC_CLICK): Check pending_asyncs instead of
522 active_asyncs.
523
524 * root.h (scm_root_state): Added pending_asyncs and signal_asyncs
525 fields.
526 * root.c (root_mark): Mark them.
527 (make_root): Initialize them.
528
529 * iselect.c, iselect.h: Replaced GUILE_ISELECT with
530 USE_COOP_THREADS.
531 (scm_internal_select): Define one version for USE_COOP_THREADS and
532 one for USE_NULL_THREADS.
533 (scm_init_iselect): Likewise.
534
535 * inline.h (scm_cell, scm_double_cell): Also allow
536 USE_COPT_THREADS to not protect the slot initializers.
537
538 * init.c (scm_init_guile_1): Call scm_init_thread_procs. This is
539 because threads need to be initialized before the stack, but
540 gsubrs such as scm_timed_condition_variable_wait can only be
541 created later.
542
543 * threads.h: Include "coop-pthreads.h" when requested.
544 (scm_threads_make_mutex, scm_threads_lock_mutex,
545 scm_threads_unlock_mutex, scm_threads_monitor): Removed, they were
546 not implemented anyway.
547 (scm_init_thread_procs, scm_try_mutex,
548 scm_timed_condition_variable_wait,
549 scm_broadcast_condition_variable, scm_c_thread_exited_p,
550 scm_thread_exited_p): New prototypes.
551 (struct timespec): Define if not already defined.
552 (scm_t_mutex, scm_mutex_init, scm_mutex_lock, scm_mutex_trylock,
553 scm_mutex_unlock, scm_mutex_destroy, scm_t_cond, scm_cond_init,
554 scm_cond_wait, scm_cond_timedwait, scm_cond_signal,
555 scm_cond_broadcast, scm_cond_destroy): Declarations moved here and
556 deprecated.
557
558 * threads.c: Include <errno.h>. Include "coop-pthreads.c" when
559 requested.
560 (scm_thread_exited_p): New.
561 (scm_try_mutex, scm_broadcast_condition_variable): Newly
562 registered procedures.
563 (scm_wait_condition_variable, scm_timed_wait_condition_variable):
564 Use the latter as the procedure for "wait-condition-variable",
565 thus offering a optional timeout parameter to Scheme.
566 (scm_wait_condition_variable): Implement in terms of
567 scm_timed_wait_condition_variable.
568 (scm_mutex_init, scm_mutex_lock, scm_mutex_trylock,
569 scm_mutex_unlock, scm_mutex_destroy, scm_cond_init,
570 scm_cond_wait, scm_cond_timedwait, scm_cond_signal,
571 scm_cond_broadcast, scm_cond_destroy): Implement in terms of
572 scm_make_mutex, etc, and deprecate.
573 (scm_init_threads): Do not create smobs, leave this to
574 scm_threads_init. Do not include "threads.x" file.
575 (scm_init_thread_procs): New, include "threads.x" here.
576
577 * null-threads.h (scm_null_mutex, scm_null_mutex_init,
578 scm_null_mutex_lock, scm_null_mutex_unlock,
579 scm_null_mutex_destroy, scm_null_condvar, scm_null_condvar_init,
580 scm_null_condvar_wait, scm_null_condvar_signal,
581 scm_null_condvar_destroy): Removed.
582 (scm_mutex_init, scm_mutex_lock, scm_mutex_unlock, scm_cond_init,
583 scm_cond_wait, scm_cond_signal, scm_cond_broadcast,
584 scm_cond_destory): Do not define, they are now deprecated and
585 handled by threads.{h,c}.
586
587 * null-threads.c (scm_null_mutex, scm_null_cond): Define here.
588 (scm_threads_init): Create smobs here, using the appropriate
589 sizes.
590 (block): Removed, now unused.
591 (scm_c_thread_exited_p): New.
592 (scm_null_mutex_init, scm_null_mutex_lock, scm_null_mutex_unlock,
593 scm_null_mutex_destroy, scm_null_condvar_init,
594 scm_null_condvar_wait, scm_null_condvar_signal,
595 scm_null_condvar_destroy): Removed and updated users to do their
596 task directly.
597 (scm_try_mutex, timeval_subtract,
598 scm_timed_wait_condition_variable,
599 scm_broadcast_condition_variable): New.
600 (scm_wait_condition_variable): Removed.
601
602 * coop-defs.h (coop_m): Added 'level' field.
603 (scm_t_mutex, scm_mutex_init, scm_mutex_lock, scm_mutex_trylock,
604 scm_mutex_unlock, scm_mutex_destroy, scm_t_cond, scm_cond_init,
605 scm_cond_wait, scm_cond_timedwait, scm_cond_signal,
606 scm_cond_broadcast, scm_cond_destroy, struct timespec): Do not
607 define.
608 (coop_condition_variable_broadcast): New.
609
610 * coop-threads.c (scm_threads_init): Create smobs here, using the
611 appropriate sizes.
612 (scm_c_thread_exited_p, scm_try_mutex,
613 scm_timed_wait_condition_variable,
614 scm_broadcast_condition_variable): New.
615 (scm_wait_condition_variable): Removed.
616
617 * coop.c (coop_new_mutex_init): Initialize level.
618 (coop_mutex_trylock, coop_mutex_lock, coop_mutex_unlock): maintain
619 level.
620 (coop_condition_variable_signal): Renamed to
621 coop_condition_variable_broadcast and reimplemented in terms of
622 that. Thus...
623 (coop_condition_variable_broadcast): New.
624
625 * goops.c (hell_mutex): Reimplemented using scm_make_mutex, etc.
626
627 * coop-pthreads.h, coop-pthreads.c: New, but unfinished.
628
087ed40d
MV
6292002-10-21 Marius Vollmer <mvo@zagadka.ping.de>
630
65a23095
MV
631 * null-threads.c: Include <time.h>. Also, use <...> for inclusion
632 of system headers.
633
087ed40d
MV
634 * async.c, goops.h, modules.h, validate.h (SCM_MAKE_VALIDATE_MSG):
635 New. Use it instead of SCM_MAKE_VALIDATE in lots of places to
30f920c3 636 give better error messages. Thanks to Bill Schottstaedt!
087ed40d 637
5ec1d2c8
DH
6382002-10-19 Dirk Herrmann <D.Herrmann@tu-bs.de>
639
640 * evalext.h, evalext.c (scm_definedp, scm_defined_p): Renamed
641 scm_definedp to scm_defined_p and deprecated scm_definedp.
642
100ae50d
DH
6432002-10-19 Dirk Herrmann <D.Herrmann@tu-bs.de>
644
645 * async.h, async.c (scm_system_async): Fixed deprecation to work
646 correctly when deprecated features are excluded.
647
2794cb50
MV
6482002-10-16 Marius Vollmer <marius.vollmer@uni-dortmund.de>
649
650 * async.c (scm_system_async_mark_for_thread): Validate thread
651 argument.
652
653 * coop-threads.c (scm_i_thread_root): Do not validate argument.
654
655 * feature.c (scm_init_feature): Don't add 'threads' for
656 USE_NULL_THREADS.
657
658 * inline.h (scm_cell, scm_double_cell): Also allow
659 USE_NULL_THREADS to not protect the slot initializers.
660
661 * scmsigs.c (scm_sigaction_for_thread): It's "USE_THREADS" not
662 "USE_THREAD".
663
664 * Makefile.am (noinst_HEADERS): Added null-threads.c.
665 (modinclude_HEADERS): Added null-threads.h.
666
667 * threads.h: Include null-threads.h when !USE_COOP_THREADS.
668 * threads.c: Include null-threads.c when !USE_COOP_THREADS.
669 (scm_init_threads): Use generic type names scm_t_mutex and
670 scm_t_cond instead of coop_m and coop_c.
671
672 * null-threads.c, null-threads.h: New files.
673
ff810d7a
MV
6742002-10-15 Marius Vollmer <mvo@zagadka.ping.de>
675
676 * Makefile.am: Replaced "$<" in non-pattern rules with its value.
677 This is to support makes that know about "$<" only in pattern
678 rules, like Sun's make.
679
a90bdb73
MV
6802002-10-13 Marius Vollmer <mvo@zagadka.ping.de>
681
682 * Makefile.am (libpath.h): Fixed typo in top_srcdir_absolute
683 substitution. Thanks to David Allouche!
684
e71a8bf2
DH
6852002-10-13 Dirk Herrmann <D.Herrmann@tu-bs.de>
686
687 * evalext.h: Replaced SCM_DEBUG_DEPRECATED with
688 !SCM_ENABLE_DEPRECATED.
689
41f77ff5
MV
6902002-10-11 Marius Vollmer <marius.vollmer@uni-dortmund.de>
691
504d99c5 692 * async.c (scm_system_async_mark_for_thread): Only call
41f77ff5
MV
693 scm_i_thread_root when USE_THREADS is defined. Use scm_root
694 otherwise.
695
696 * scmsigs.c (take_signal): Only call scm_i_thread_root when
697 USE_THREADS is defined. Use scm_root otherwise.
698 (scm_sigaction_for_thread): Ignore THREAD argument when
699 USE_THREADS is not defined. Also, move THREAD argument defaulting
700 out of HAVE_SIGACTION section, which was a bug.
701
6d16b125
MV
7022002-10-10 Marius Vollmer <marius.vollmer@uni-dortmund.de>
703
704 * scmsigs.c (scm_sigaction_for_thread): Store original handler in
705 signal_handlers, not the closure that is used as the async.
706 The closure is stored in signal_handler_cells, as previously.
707
acfa1f52
MV
7082002-10-10 Marius Vollmer <mvo@zagadka.ping.de>
709
710 * root.h (scm_root_state): Added 'block_async' slot.
711 (scm_active_asyncs): Removed abbrev.
712 * root.c (scm_make_root): Initialize 'block_asyncs' slot.
713
714 * __scm.h (SCM_ASYNC_TICK): Do without the scm_active_asyncs
715 abbrev.
716
717 * async.h (scm_call_with_blocked_asyncs,
718 scm_call_with_unblocked_asyncs, scm_c_call_with_blocked_asyncs,
719 scm_c_call_with_unblocked_asyncs): New prototypes.
720 (scm_mask_signals, scm_unmask_signals): Deprecated.
721 (scm_mask_ints): Turned into a macro.
722 * async.c (scm_mask_ints): Removed.
723 (scm_run_asyncs): Do not set scm_mask_ints while running an async.
724 this should not be necessary.
725 (scm_async_click): Test block_asyncs instead of scm_mask_ints.
726 (scm_mask_signals, scm_unmask_signals): Deprecated. Emit
727 deprecation warning and check for errornous use. Set block_asyncs
728 instead of scm_mask_ints.
729 (increase_block, decrease_block, scm_call_with_blocked_asyncs,
730 scm_call_with_unblocked_asyncs, scm_c_call_with_blocked_asyncs,
731 scm_c_call_with_unblocked_asyncs): New.
732
733 * script.c (scm_compile_shell_switches): Do not set scm_mask_ints.
734 Asyncs are enabled by default.
735
34010f56
NJ
7362002-10-09 Neil Jerram <neil@ossau.uklinux.net>
737
738 * vports.c (scm_make_soft_port): Allow vector argument to carry a
739 6th element: an input waiting thunk.
740 (sf_input_waiting): New.
741
9310d6f2
MV
7422002-10-05 Marius Vollmer <mvo@zagadka.ping.de>
743
744 * root.c (root_mark): Mark active_asyncs slot.
745
746 * async.c (scm_async_click): Set the cdr of a executed handler
747 cell to SCM_BOOL_F, not SCM_EOL.
748 (scm_i_queue_async_cell): Queue the cell at the end of the list,
749 and only if the handler procedure is not already present.
750 (scm_system_async_mark_for_thread): Initialize cdr of handler cell
751 with SCM_BOOL_F.
752 * scmsigs.c (scm_sigaction_for_thread): Likewise.
753
ac48c719
RB
7542002-10-04 Rob Browning <rlb@defaultvalue.org>
755
1360a142
RB
756 * guile.c (main): switch to scm_lt_dlset_preloaded_symbols;
757
758 * dynl.c (sysdep_dynl_link): switch to scm_lt_dlhandle,
759 scm_lt_dlopenext, and scm_lt_dlerror.
760 (sysdep_dynl_unlink): switch to scm_lt_dlhandle, scm_lt_dlclose,
761 and scm_lt_dlerror.
762 (sysdep_dynl_func): switch to scm_lt_dlhandle, scm_lt_dlsym,
763 and scm_lt_dlerror.
764 (sysdep_dynl_init): switch to scm_lt_dlinit();
765
766 * Makefile.am (libguile_la_LIBADD): switch to use
767 libguile-ltdl.la.
768
504d99c5 769 * numbers.c (scm_integer_expt): (expt 0 1) should be 1.
ac48c719 770
497092c9
MV
7712002-10-04 Marius Vollmer <mvo@zagadka.ping.de>
772
773 * scmsigs.h (scm_sigaction_for_thread): New prototype.
774 * scmsigs.c (got_signal): Removed.
775 (signal_handler_cells, signal_handler_threads): New.
776 (take_signal): Queue the cell of the signal for the specified
777 thread. Reset the signal handler on systems that don't have
778 sigaction.
779 (sys_deliver_signals): Removed.
780 (close_1): New.
781 (scm_sigaction_for_thread): Renamed from scm_sigaction and
782 extended to also set the thread of a signal and allocate a cell
783 for it. Keep the Scheme name "sigaction". Check that signum is
784 within range. Also, use SCM_VECTOR_REF instead of SCM_VELTS.
785 (scm_sigaction): Implement in terms of scm_sigaction_for_thread.
786 (scm_init_scmsigs): Allocate signal_handler_cells and
787 signal_handler_threads vectors.
788
789 * async.c: Removed GUILE_OLD_ASYNC_CLICK code. Reorganized so
790 that system asnycs and user asyncs are separated. Reimplemented
791 system asyncs to work per-thread.
792
793 * gc.c (scm_init_gc): Do not use scm_system_async.
794
795 * async.h (scm_asyncs_pending, scm_set_tick_rate,
796 scm_set_switch_rate, scm_system_async_mark_from_signal_handler):
797 Removed prototypes.
798 (scm_i_queue_async_cell): New.
799
800 * __scm.h (scm_asyncs_pending_p): Removed.
801 (SCM_ASYNC_CLICK): Check scm_active_asyncs instead of
802 scm_asyncs_pending_p.
803
804 * async.h (scm_system_async_mark_for_thread): New prototype.
805
806 * __scm.h: Removed GUILE_OLD_ASYNC_CLICK code.
807
808 * root.h (scm_root_state): Added new "active_asyncs" slot.
809 * root.c (scm_make_root): Initialize it to SCM_EOL.
810
811 * coop-defs.h (coop_t): Added new "handle" slot.
812 * coop-threads.c (all_threads, scm_current_thread,
813 scm_all_threads, scm_i_thread_root): New.
814 (scm_threads_init): Add main thread to all_threads.
815 (scheme_launch_thread): Remove thread from all_threads when it
816 terminates.
817 (scm_call_with_new_thread): Initialize handle slot of coop_t
818 structure and add new thread to all_threads.
819 (scm_spawn_thread): Likewise.
820
821 * threads.h (scm_current_thread, scm_all_threads): New prototypes.
822 * threads.c (scm_current_thread, scm_all_threads): Register as
823 primitives.
824
825 * dynl.c: Use scm_lt_ prefix for libltdl functions.
826
480fa28d
NJ
8272002-09-29 Neil Jerram <neil@ossau.uklinux.net>
828
829 * script.c (scm_compile_shell_switches): Fix bad spelling of
830 `explicitly' in comment.
831
8322002-09-28 Neil Jerram <neil@ossau.uklinux.net>
833
834 * posix.c (scm_geteuid, scm_getegid, scm_seteuid, scm_setegid):
835 Refer to provided? in doc string rather than deprecated feature?.
836
3553e1d1
GH
8372002-09-24 Gary Houston <ghouston@arglist.com>
838
839 * inline.h (scm_double_cell): prevent reordering of statements
840 with any following code (for GCC 3 strict-aliasing).
841 * numbers.c (scm_make_real), num2float.i.c (FLOAT2NUM): removed
842 the earlier version of the reordering prevention.
843
4ad0814a
HWN
8442002-09-19 Han-Wen Nienhuys <hanwen@cs.uu.nl>
845
846 * inline.h (scm_double_cell): move SET_GCMARK set out of if body.
847
e88e4f2e
HWN
8482002-09-09 Han-Wen Nienhuys <hanwen@cs.uu.nl>
849
850 * gc-malloc.c (scm_gc_register_collectable_memory): more overflow
851 protection.
852
1e71eafb
HWN
8532002-09-08 Han-Wen Nienhuys <hanwen@cs.uu.nl>
854
855 * inline.h: include stdio.h
856
857 * smob.c (free_print): abort if scm_debug_cell_accesses_p is set
858
61ef9c1f
HWN
8592002-09-05 Han-Wen Nienhuys <hanwen@cs.uu.nl>
860
dac04e9f
HWN
861 * gc-segment.c (scm_i_make_initial_segment): check user settings
862 for sanity.
863
864 * gc-malloc.c (scm_gc_init_malloc): check user settings for
865 sanity.
dac04e9f
HWN
866
867 * gc-freelist.c (scm_init_freelist): check user settings for sanity.
868
ffd72400
HWN
869 * struct.h: change scm_structs_to_free to scm_i_structs_to_free
870
871 * gc-malloc.c (scm_gc_register_collectable_memory): use floats;
1e71eafb
HWN
872 these won't ever wrap around with high memory usage. Thanks to
873 Sven Hartrumpf for finding this.
ffd72400 874
5bd4a949
HWN
875 * gc-freelist.c: include <stdio.h>
876
61ef9c1f
HWN
877 * gc-malloc.c: add DEBUGINFO for mtrigger GCs.
878
ffd0ef3b
MV
8792002-09-01 Marius Vollmer <mvo@zagadka.ping.de>
880
a27e3d14
MV
881 * vectors.h (SCM_VECTOR_REF): New.
882
ffd0ef3b
MV
883 * snarf.h (SCM_DEFINE_PUBLIC): New.
884
f8a1712b
MV
8852002-08-30 Marius Vollmer <mvo@zagadka.ping.de>
886
887 * socket.c (scm_addr_vector): Added size of address to arguments.
888 Use it to avoid accessing a non-existent path in a sockaddr_un.
889 Changed all callers.
890
7200a36b
HWN
8912002-08-29 Han-Wen Nienhuys <hanwen@cs.uu.nl>
892
1383773b
HWN
893 * gc.h: remove DOUBLECELL card flags.
894
895 * gc-malloc.c (scm_calloc): try to use calloc() before calling
896 scm_realloc().
897
898 * gc-segment.c (scm_i_initialize_heap_segment_data): remove card
899 init loop; handle this from scm_init_card_freelist()
900
901 * gc-card.c (scm_init_card_freelist): init bit vector here.
902
7200a36b 903 * numbers.c (scm_make_real): prevent reordering of statements
8fa5786d 904 num2float.i.c (FLOAT2NUM): idem
7200a36b 905
9981de3a
HWN
9062002-08-27 Han-Wen Nienhuys <hanwen@cs.uu.nl>
907
908 * eval.h: prepend libguile/ to include path
909
19647556
MV
9102002-08-26 Marius Vollmer <mvo@zagadka.ping.de>
911
912 * script.c (scm_compile_shell_switches): Added "2002" to Copyright
913