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