| Commit message (Expand) | Author | Age | Files | Lines |
... | |
* | Final names for new array functions...Globally rename (array-from* -> array-slice), (array-from ->
array-cell-ref), (array-amend! -> array-cell-set!), (array-for-each-cell
-> array-slice-for-each).
| Daniel Llorens | 2017-01-09 | 4 | -39/+39 |
* | Fix scm_init_stime for macOS...* libguile/stime.c (scm_init_stime): Remove needless test of
clock_getcpuclockid. Fixes build on macOS; thanks to Matt Wette for
the report and fix.
| Andy Wingo | 2017-01-08 | 1 | -4/+1 |
* | Fix alloc_aligned for high allocations...* libguile/loader.c (alloc_aligned): Widen alignment. Thanks to Matt
Wette for the report and the fix!
| Andy Wingo | 2017-01-08 | 1 | -1/+1 |
* | Speed up load-thunk-from-memory for page alignment...* libguile/loader.c (page_size): New static var.
(alloc_aligned): Enable mmap path that was never used in the
past (!). Thanks to Matt Wette for the bug report!
(load_thunk_from_memory): Use page_size instead of 4096.
(scm_bootstrap_loader): Init page_size.
| Andy Wingo | 2017-01-08 | 1 | -7/+14 |
* | Fix mkstemp on macOS...* libguile/filesys.c (scm_i_mkstemp): Limit flags to mkostemp. Based on
a patch by Matt Wette; thanks!
| Andy Wingo | 2017-01-08 | 1 | -0/+6 |
* | Fix close-port race....* libguile/ports.c (release_port): Fix race.
| Andy Wingo | 2017-01-08 | 1 | -8/+15 |
* | Exited threads retain less memory...* libguile/threads.c (on_thread_exit): Lessen excess retention.
| Andy Wingo | 2017-01-08 | 1 | -6/+17 |
* | Prevent some interrupts of wait-condition-variable...* libguile/threads.c (timed_wait): Disable interrupts while reacquiring
mutex after wait-condition-variable.
| Andy Wingo | 2017-01-08 | 1 | -10/+18 |
* | Enable interrupts only when running thread body...* libguile/threads.c (really_launch): Start threads with asyncs
blocked.
* module/ice-9/threads.scm (call-with-new-thread): Unblock asyncs once
we have the bookkeeping sorted out. Don't use
with-continuation-barrier; it's not needed. Print nice thread
backtraces.
| Andy Wingo | 2017-01-08 | 1 | -0/+3 |
* | Remove thread-specific admin mutex...* libguile/threads.c (guilify_self_1):
* libguile/threads.h (scm_i_thread): Remove unused thread "admin
mutex".
| Andy Wingo | 2017-01-08 | 2 | -3/+0 |
* | Remove thread-exited? check in sigaction...* libguile/scmsigs.c (scm_sigaction_for_thread): Remove check that
thread hadn't exited. This check was racy as it's always possible
that the other thread exits between checking it or even after the
signal handler is installed.
| Andy Wingo | 2017-01-08 | 1 | -5/+1 |
* | Thread prepare-to-wait respects block_asyncs...* libguile/async.c (scm_i_prepare_to_wait): Don't signal interrupt if
asyncs are blocked.
| Andy Wingo | 2017-01-08 | 1 | -2/+3 |
* | New interfaces to help wait on fd/cond...* libguile/async.h:
* libguile/async.c (struct scm_thread_wake_data): Include the cond to
signal. Be a union and include a tag.
(scm_i_prepare_to_wait): Rename from scm_i_setup_sleep and take wake
data directly. Also call scm_i_wait_finished as appropriate.
(scm_i_wait_finished): Rename from scm_i_reset_sleep.
(scm_i_prepare_to_wait_on_fd, scm_c_prepare_to_wait_on_fd):
(scm_i_prepare_to_wait_on_cond, scm_c_prepare_to_wait_on_cond): New
functions.
(scm_c_wait_finished): New function.
(scm_system_async_mark_for_thread): Adapt to wake data change.
* libguile/threads.c (block_self, scm_std_select): Adapt to async
interface changes.
* doc/ref/api-scheduling.texi (Asyncs): Doc new public interfaces.
| Andy Wingo | 2016-12-29 | 3 | -54/+108 |
* | FFI: Add support for functions that set 'errno'....Implements wishlist item <https://debbugs.gnu.org/18592>.
Requested by Frank Terbeck <ft@bewatermyfriend.org>.
Based on a proposed patch by Nala Ginrut <nalaginrut@gmail.com>.
Patch ported to 2.2 by Andy Wingo <wingo@pobox.com>.
* libguile/foreign.c (cif_to_procedure): Add 'with_errno' argument.
If true, truncate result to only one return value.
(scm_i_foreign_call): Separate the arguments. Always return errno.
(pointer_to_procedure): New static function.
(scm_pointer_to_procedure_with_errno): New C API function, implemented
in terms of 'pointer_to_procedure'.
(scm_pointer_to_procedure): Reimplement in terms of
'pointer_to_procedure', no longer bound to "pointer->procedure". See
below.
(scm_i_pointer_to_procedure): New C function bound to
"pointer->procedure" which now accepts the optional #:return-errno?
keyword argument, implemented in terms of 'pointer_to_procedure'.
(k_return_errno): New keyword #:return-errno?.
* libguile/foreign.h (scm_pointer_to_procedure_with_errno): Add prototype.
* doc/ref/api-foreign.texi (Dynamic FFI): Adjust documentation.
* libguile/vm-engine.c (foreign-call): Return two values.
| Mark H Weaver | 2016-12-18 | 3 | -64/+86 |
* | Make scm_gc_warn_proc() write directly to stderr...This avoids a deadlock due to the lookup of cur_warnport_fluid while an
allocation is ongoing.
* libguile/gc.c (scm_gc_warn_proc): Write the warning directly to
stderr.
| Daniel Llorens | 2016-12-14 | 1 | -31/+3 |
* | Add suspendable-continuation?...* doc/ref/api-control.texi (Prompt Primitives): Document
suspendable-continuation?.
* libguile/control.c (scm_suspendable_continuation_p): New procedure.
(scm_init_ice_9_control): New extension procedure, defines
suspendable-continuation?.
(scm_init_control): Register scm_init_ice_9_control.
* libguile/eval.c (eval):
* libguile/throw.c (catch):
* libguile/continuations.c (scm_i_make_continuation): Restore resumable
prompt cookie after continuation invocation.
* libguile/vm.c (scm_call_n): Arrange to set resumable_prompt_cookie
during invocation of VM.
* libguile/vm.h (struct scm_vm): Add resumable_prompt_cookie member.
* module/ice-9/control.scm: Export suspendable-continuation?.
* test-suite/tests/control.test ("suspendable-continuation?"): New
test.
| Andy Wingo | 2016-12-12 | 6 | -3/+45 |
* | Fix --without-threads...* libguile/dynl.c:
* libguile/gc.c:
* libguile/keywords.c:
* libguile/scmsigs.c:
* libguile/stime.c: Use scm_i_dynamic_link instead of scm_dynamic_link
so that things compile in without-threads configurations.
| Andy Wingo | 2016-12-07 | 5 | -9/+9 |
* | Refine check for when atomics are available....* configure.ac:
* libguile/atomics-internal.h: Use HAVE_STDATOMIC_H to know when to use
atomics.
| Andy Wingo | 2016-12-06 | 1 | -5/+3 |
* | Use readdir instead of readdir_r...* libguile/filesys.c:
* configure.ac: Remove readdir_r / readdir64_r checks and usage.
glibc's impls are thread-safe, the _r variants are squirrely and now
deprecated in glibc, and it is expected that POSIX will mandate that
readdir{,64} be thread-safe already. See
https://sourceware.org/ml/libc-alpha/2016-02/msg00093.html.
| Andy Wingo | 2016-12-06 | 1 | -64/+11 |
* | with-dynamic-state compiler and VM support...* libguile/dynstack.h (SCM_DYNSTACK_TYPE_DYNAMIC_STATE):
* libguile/dynstack.c (DYNAMIC_STATE_WORDS, DYNAMIC_STATE_STATE_BOX):
(scm_dynstack_push_dynamic_state):
(scm_dynstack_unwind_dynamic_state): New definitions.
(scm_dynstack_unwind_1, scm_dynstack_wind_1): Add with-dynamic-state
cases.
* libguile/memoize.c (push_dynamic_state, pop_dynamic_state)
(do_push_dynamic_state, do_pop_dynamic_state): New definitions.
(memoize, scm_init_memoize): Handle push-dynamic-state and
pop-dynamic-state.
* libguile/vm-engine.c (push-dynamic-state, pop-dynamic-state): New
opcodes.
* module/ice-9/boot-9.scm (with-dynamic-state): New definition in Scheme
so that the push-dynamic-state and pop-dynamic-state always run in the
VM.
* module/language/cps/compile-bytecode.scm (compile-function):
* module/language/cps/effects-analysis.scm:
* module/language/cps/types.scm:
* module/language/tree-il/effects.scm (make-effects-analyzer):
* module/language/tree-il/peval.scm (peval):
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
* module/system/vm/assembler.scm: Add support for with-dynamic-state to
the compiler.
* test-suite/tests/fluids.test ("dynamic states"): Add basic tests.
* doc/ref/vm.texi (Dynamic Environment Instructions): Update.
| Andy Wingo | 2016-12-05 | 4 | -2/+117 |
* | Reimplement dynamic states...There are two goals: one, to use less memory per dynamic state in order
to allow millions of dynamic states to be allocated in light-weight
threading scenarios. The second goal is to prevent dynamic states from
being actively mutated in two threads at once. This second goal does
mean that dynamic states object that escape into scheme are now copies
that won't receive further updates; an incompatible change, but one
which we hope doesn't affect anyone.
* libguile/cache-internal.h: New file.
* libguile/fluids.c (is_dynamic_state, get_dynamic_state)
(save_dynamic_state, restore_dynamic_state, add_entry)
(copy_value_table): New functions.
(scm_i_fluid_print, scm_i_dynamic_state_print): Move up.
(new_fluid): No need for a number.
(scm_fluid_p: scm_is_fluid): Inline IS_FLUID uses.
(fluid_set_x, fluid_ref): Adapt to dynamic state changes.
(scm_fluid_set_x, scm_fluid_unset_x): Call fluid_set_x.
(scm_swap_fluid): Rewrite in terms of fluid_ref and fluid_set.
(swap_fluid): Use internal fluid_set_x.
(scm_i_make_initial_dynamic_state): Adapt to dynamic state
representation change.
(scm_dynamic_state_p, scm_is_dynamic_state): Use new accessors.
(scm_current_dynamic_state): Use make_dynamic_state.
(scm_dynwind_current_dynamic_state): Use new accessor.
* libguile/fluids.h: Remove internal definitions. Add new struct
definition.
* libguile/threads.h (scm_i_thread): Use scm_t_dynamic_state for dynamic
state.
* libguile/threads.c (guilify_self_1, guilify_self_2):
(scm_i_init_thread_for_guile, scm_init_guile):
(scm_call_with_new_thread):
(scm_init_threads, scm_init_threads_default_dynamic_state): Adapt to
scm_i_thread change.
(scm_i_with_guile, with_guile): Remove "and parent" suffix.
(scm_i_reset_fluid): Remove unneeded function.
* doc/ref/api-scheduling.texi (Fluids and Dynamic States): Remove
scm_make_dynamic_state docs. Update current-dynamic-state docs.
* libguile/vm-engine.c (vm_engine): Update fluid-ref and fluid-set!
inlined fast paths for dynamic state changes.
* libguile/vm.c (vm_error_unbound_fluid): Remove now-unused function.
* NEWS: Update.
* module/ice-9/deprecated.scm (make-dynamic-state): New definition.
* libguile/deprecated.h:
* libguile/deprecated.c (scm_make_dynamic_state): Move here.
* libguile/__scm.h (scm_t_dynamic_state): New typedef.
* libguile/dynstack.h:
* libguile/dynstack.c (scm_dynstack_push_fluid):
(scm_dynstack_unwind_fluid): Take raw dynstate in these internal
functions.
* libguile/throw.c (catch): Adapt to dynstack changes.
| Andy Wingo | 2016-12-05 | 14 | -293/+416 |
* | Fix two wait-condition-variable race conditions...* libguile/threads.c (timed_wait): When looping to reacquire mutex,
check if mutex owner after dropping mutex to run asyncs when the
reacquire is interrupted.
Also for asyncs that interrupted the initial wait, just return #t
directly, and allow the caller to loop. Fixes a deadlock in which a
thread could have pending asyncs after dropping a mutex and which
prevent it from going to wait on a cond, but then the broadcast comes
while nobody is waiting and the mutex is dropped, then after
reacquiring the mutex when we go to wait again, we wait forever.
The correct thing to do is after reacquiring the mutex, to allow the
application to check if waiting is appropriate.
| Andy Wingo | 2016-11-30 | 1 | -12/+10 |
* | Compile fluid-set! to VM opcode...* libguile/vm-engine.c (fluid-set!): Fix name of opcode to correspond
with name of Tree-IL primitive. Fixes compilation of fluid-set! to
actually use the fluid-set! opcode.
* doc/ref/vm.texi (Dynamic Environment Instructions): Update.
* module/language/cps/compile-bytecode.scm (compile-function): Add
fluid-set! case.
* module/system/vm/assembler.scm: Update export name for
emit-fluid-set!.
| Andy Wingo | 2016-11-27 | 1 | -1/+1 |
* | Add weak-table fast path for update...* libguile/weak-table.c (weak_table_put_x): If the key is the same and
the table is weak-key, avoid re-setting disappearing links.
| Andy Wingo | 2016-11-26 | 1 | -0/+10 |
* | Fix scm_weak_table_refq for undefined default...* libguile/weak-table.c (scm_weak_table_refq): No need to default weak
table result to #f; just use whatever was passed in.
| Andy Wingo | 2016-11-26 | 1 | -3/+0 |
* | Deprecate scm_from_contiguous_array...scm_from_contiguous_array() was undocumented, unused within Guile, and
can be replaced by make-array + array-copy! without requiring contiguity
and without loss of performance.
* libguile/arrays.c (scm_array_contents): Do not rely on
SCM_I_ARRAY_CONTP.
* test-suite/tests/arrays.test: Test array-contents with 0-rank array.
* libguile/arrays.h: Declare scm_i_shap2ra(),
SCM_SET_ARRAY_CONTIGUOUS_FLAG, SCM_CLR_ARRAY_CONTIGUOUS_FLAG so that
scm_from_contiguous_array() can keep using them.
* libguile/deprecated.c (scm_from_contiguous_array): Move here from
arrays.c.
* libguile/deprecated.h (scm_from_contiguous_array): Deprecate.
* NEWS: Add deprecation notice.
| Daniel Llorens | 2016-11-23 | 4 | -64/+87 |
* | New functions (array-for-each-cell, array-for-each-cell-in-order)...* libguile/array-map.c (scm_i_array_rebase, scm_array_for_each_cell):
New functions. Export scm_array_for_each_cell() as
(array-for-each-cell).
(array-for-each-cell-in-order): Define additional export.
* libguile/array-map.h (scm_i_array_rebase, scm_array_for_each_cell):
Add prototypes.
* test-suite/tests/array-map.test: Renamed from
test-suite/tests/ramap.test, fix module name. Add tests for
(array-for-each-cell).
* test-suite/Makefile.am: Apply rename array-map.test -> ramap.test.
| Daniel Llorens | 2016-11-23 | 2 | -2/+262 |
* | New functions array-from, array-from*, array-amend!...* libguile/arrays.h (scm_array_from, scm_array_from_s,
scm_array_amend_x): New declarations.
* libguile/arrays.c (scm_array_from, scm_array_from_s,
scm_array_amend_x): New functions, export as array-from, array-from*,
array-amend!.
* test-suite/tests/arrays.test: Tests for array-from, array-from*,
array-amend!. Replace with-test-prefix/c&e with with-test-prefix where
the array read syntax isn't used.
| Daniel Llorens | 2016-11-23 | 2 | -1/+178 |
* | Do not use array handles in scm_vector...* libguile/vectors.c (scm_vector): Use SCM_I_VECTOR_WELTS on new vector
instead of generic scm_vector_elements; cf. scm_vector_copy().
(scm_vector_elements): Forward to scm_vector_writable_elements().
(scm_vector_writable_elements): Remove special error message for weak
vector arg.
* libguile/generalized-vectors.c (SCM_VALIDATE_VECTOR_WITH_HANDLE):
Remove unused macro.
* libguile/array-handle.c (scm_array_handle_elements): Forward to
scm_array_handle_writable_elements().
| Daniel Llorens | 2016-11-23 | 3 | -23/+5 |
* | Special case for array-map! with three arguments...Benchmark:
(define type #t)
(define A (make-typed-array 's32 0 10000 1000))
(define B (make-typed-array 's32 0 10000 1000))
(define C (make-typed-array 's32 0 10000 1000))
before:
scheme@(guile-user)> ,time (array-map! C + A B)
;; 0.792653s real time, 0.790970s run time. 0.000000s spent in GC.
after:
scheme@(guile-user)> ,time (array-map! C + A B)
;; 0.598513s real time, 0.597146s run time. 0.000000s spent in GC.
* libguile/array-map.c (ramap): Add special case with 3 arguments.
| Daniel Llorens | 2016-11-23 | 1 | -22/+38 |
* | Speed up for multi-arg cases of scm_ramap functions...This patch results in a 20%-40% speedup in the > 1 argument cases of
the following microbenchmarks:
(define A (make-shared-array #0(1) (const '()) #e1e7))
; 1, 2, 3 arguments.
(define a 0) ,time (array-for-each (lambda (b) (set! a (+ a b))) A)
(define a 0) ,time (array-for-each (lambda (b c) (set! a (+ a b c))) A A)
(define a 0) ,time (array-for-each (lambda (b c d) (set! a (+ a b c d))) A A A)
(define A (make-shared-array (make-array 1) (const '()) #e1e7))
(define B (make-shared-array #0(1) (const '()) #e1e7))
; 1, 2, 3 arguments.
,time (array-map! A + B)
,time (array-map! A + B B)
,time (array-map! A + B B B)
* libguile/array-map.c (scm_ramap): Note on cproc arguments.
(rafill): Assume that dst's lbnd is 0.
(racp): Assume that src's lbnd is 0.
(ramap): Assume that ra0's lbnd is 0. When there're more than two
arguments, compute the array handles before the loop. Allocate the arg
list once and reuse it in the loop.
(rafe): Do as in ramap(), when there's more than one argument.
(AREF, ASET): Remove.
| Daniel Llorens | 2016-11-23 | 2 | -63/+75 |
* | Support typed arrays in some sort functions...* libguile/sort.c (sort!, sort, restricted-vector-sort!, sorted?):
Support arrays of rank 1, whatever the type.
* libguile/quicksort.i.c: Fix accessors to handle typed arrays.
* test-suite/tests/sort.test: Test also with typed arrays.
| Daniel Llorens | 2016-11-23 | 2 | -66/+110 |
* | Remove deprecated array functions...* libguile/array-map.c (scm_array_fill_int, scm_array_fill_int,
scm_ra_eqp, scm_ra_lessp scm_ra_leqp, scm_ra_grp, scm_ra_greqp,
scm_ra_sum, scm_ra_difference, scm_ra_product, scm_ra_divide,
scm_array_identity): Remove deprecated functions.
* libguile/array-map.h: Remove declaration of deprecated functions.
* libguile/generalized-vectors.h, libguile/generalized-vectors.c
(scm_is_generalized_vector, scm_c_generalized_vector_length,
scm_c_generalized_vector_ref, scm_c_generalized_vector_set_x): These
functions were deprecated in 2.0.9. Remove.
* doc/ref/api-compound.texi: Remove uniform-array-read!,
uniform-array-write from the manual. These procedures where removed in
fc7bd367ab4b5027a7f80686b1e229c62e43c90b (2011-05-12).
| Daniel Llorens | 2016-11-23 | 4 | -312/+0 |
* | Reuse SCM_BYTEVECTOR_TYPED_LENGTH in scm_array_get_handle...* libguile/bytevectors.h (SCM_BYTEVECTOR_TYPE_SIZE,
SCM_BYTEVECTOR_TYPED_LENGTH): Moved from libguile/bytevectors.c.
* libguile/array-handle.c (scm_array_get_handle): Reuse
SCM_BYTEVECTOR_TYPED_LENGTH.
| Daniel Llorens | 2016-11-23 | 3 | -9/+7 |
* | Avoid unneeded internal use of array handles...* libguile/arrays.c (scm_shared_array_root): Adopt uniform check order.
(scm_shared_array_offset, scm_shared_array_increments): Use the array
fields directly just as scm_shared_array_root does.
(scm_c_array_rank): Moved from libguile/generalized-arrays.c. Don't
use array handles, but follow the same type check sequence as the
other array functions (shared-array-root, etc).
(scm_array_rank): Moved from libguile/generalized-arrays.h.
* libguile/arrays.h: Move prototypes here.
* test-suite/tests/arrays.test: Tests for shared-array-offset,
shared-array-increments.
| Daniel Llorens | 2016-11-23 | 4 | -46/+46 |
* | Deprecate dynamic roots...* libguile/root.h:
* libguile/root.c: Remove these files.
* libguile/deprecated.h:
* libguile/deprecated.c (scm_internal_cwdr, scm_call_with_dynamic_root)
(scm_dynamic_root, scm_apply_with_dynamic_root): Deprecate.
Remove all root.h usage, which was vestigial.
* module/ice-9/serialize.scm: Use (current-thread) instead
of (dynamic-root).
| Andy Wingo | 2016-11-21 | 44 | -291/+168 |
* | Inline interrupts...* libguile/async.c:
* libguile/async.h (scm_i_async_push, scm_i_async_pop): Make internally
available.
* libguile/vm-engine.c (vm_engine): Invoke interrupts inline. Add
return-from-interrupt instruction.
* libguile/vm.c (vm_handle_interrupt_code): New "builtin".
| Andy Wingo | 2016-11-19 | 4 | -16/+60 |
* | Refactor async handling to be FIFO...* libguile/async.c (scm_i_async_push, scm_i_async_pop): New helpers.
(scm_async_tick, scm_system_async_mark_for_thread): Use the new
helpers.
| Andy Wingo | 2016-11-18 | 1 | -17/+85 |
* | Remove SCM_DEBUG_CELL_ACCESSES==1...Since the move to BDW-GC this option has not been useful.
* libguile/__scm.h (SCM_DEBUG_CELL_ACCESSES): Remove default
definition.
* libguile/gc.h: Add comment about cells.
(SCM_VALIDATE_CELL): Remove. I did a search on the internet and I
found no external users.
(SCM_CELL_WORD, SCM_CELL_OBJECT, SCM_SET_CELL_WORD)
(SCM_SET_CELL_OBJECT, SCM_CELL_OBJECT_LOC): Remove SCM_VALIDATE_CELL
uses.
* libguile/gc.c (scm_debug_cell_accesses_p)
(scm_expensive_debug_cell_accesses_p)
(scm_debug_cells_gc_interval, scm_i_expensive_validation_check)
(scm_assert_cell_valid): Remove bindings only available when
SCM_DEBUG_CELL_ACCESSES was 1.
* libguile/list.c (scm_list_n): Remove SCM_VALIDATE_CELL usage.
| Andy Wingo | 2016-11-18 | 4 | -192/+17 |
* | Explicit interrupt handling in VM...* libguile/foreign.c (CODE, get_foreign_stub_code): Add explicit
handle-interrupts and return-values calls, as foreign-call will fall
through.
* libguile/gsubr.c (A, B, C, AB, AC, BC, ABC, SUBR_STUB_CODE)
(scm_i_primitive_call_ip): Same.
* libguile/vm-engine.c (VM_HANDLE_INTERRUPTS): Inline into
handle-interrupts.
(RETURN_ONE_VALUE, RETURN_VALUE_LIST): Inline into callers, and fall
through instead of returning.
(BR_BINARY, BR_UNARY, BR_ARITHMETIC, BR_U64_ARITHMETIC): Remove
conditional VM_HANDLE_INTERRUPTS, as the compiler already inserted the
handle-interrupts calls if needed.
(vm_engine): Remove VM_HANDLE_INTERRUPTS invocations except in the
handle-interrupts instruction.
| Andy Wingo | 2016-11-17 | 3 | -95/+70 |
* | Add handle-interrupts inst and compiler pass...* libguile/vm-engine.c (vm_engine): Remove initial VM_HANDLE_INTERRUPTS
call; surely our caller already handled interrupts. Add
handle-interrupts opcode.
* am/bootstrap.am (SOURCES):
* module/Makefile.am (SOURCES): Add handle-interrupts.scm.
* module/system/vm/assembler.scm (system):
* module/language/cps/compile-bytecode.scm (compile-function):
(lower-cps): Add handle-interrupts support.
* module/language/cps/handle-interrupts.scm: New file.
| Andy Wingo | 2016-11-16 | 1 | -3/+10 |
* | Slim thread cleanup...* libguile/threads.c (on_thread_exit): Clean up the cleanup. We no
longer need to re-enter Guile mode, and some of the comments were
incorrect.
| Andy Wingo | 2016-11-14 | 1 | -43/+4 |
* | join-thread in Scheme...* module/ice-9/threads.scm (join-thread): Implement in Scheme.
(call-with-new-thread): Arrange to record values in a weak table and
signal the join cond.
(with-mutex): Move up definition; call-with-new-thread needs it. (How
was this working before?)
* libguile/threads.c (guilify_self_1, guilify_self_2, do_thread_exit):
Remove join queue management.
* libguile/threads.c (scm_join_thread, scm_join_thread_timed): Call out
to Scheme.
(scm_init_ice_9_threads): Capture join-thread var.
| Andy Wingo | 2016-11-14 | 2 | -75/+14 |
* | scm_spawn_thread uses call-with-new-thread...* libguile/throw.h (scm_i_make_catch_body_closure)
(scm_i_make_catch_handler_closure): Add scm_i_ prefix and make
available for internal use.
* libguile/throw.c: Adapt.
* libguile/threads.c (scm_spawn_thread): Rewrite in terms of
scm_call_with_new_thread.
| Andy Wingo | 2016-11-14 | 3 | -83/+22 |
* | Fix crasher in scm_system_async_mark_for_thread...* libguile/async.c (scm_system_async_mark_for_thread): Only signal the
cond if there is a wait mutex.
| Andy Wingo | 2016-11-13 | 1 | -3/+6 |
* | More comments in threads.c...* libguile/threads.c (struct scm_mutex): Better comments.
| Andy Wingo | 2016-11-13 | 1 | -2/+6 |
* | Optimize lock-mutex...* libguile/threads.c (lock_mutex, scm_timed_lock_mutex): As with
unlock_mutex before, optimize by specializing to the mutex kind.
Also, avoid lock thrashing after a return from block_self.
| Andy Wingo | 2016-11-13 | 1 | -45/+85 |
* | Improve mutexes / condition variable implementation...* libguile/threads.c (scm_timed_lock_mutex): Use "level" field only for
recursive mutexes.
(unlock_mutex, scm_unlock_mutex): Factor implementation back out of
scm_unlock_mutex (doh?), but in such a way that can specialize against
mutex type.
(scm_mutex_level): Only look at level for recursive mutexes.
(scm_mutex_locked_p): Look at owner field, not level field.
(timed_wait, scm_timed_wait_condition_variable): Factor implementation
out, as above with unlock-mutex. Specialize relocking of the Guile
mutex.
| Andy Wingo | 2016-11-13 | 1 | -83/+170 |
* | Refactor GC implications of thread sleep...* libguile/async.c (struct scm_thread_wake_data): Move definition here.
(scm_i_setup_sleep): Remove "sleep_object". Caller now responsible
for scm_remember_upto_here_1 as appropriate.
(scm_system_async_mark_for_thread): Remove scm_remember_upto_here_1
call.
* libguile/async.h (scm_i_setup_sleep): Adapt prototype.
* libguile/threads.h (struct scm_thread_wake_data): Remove definition.
* libguile/threads.c (block_self): Remove sleep_object argument.
(scm_join_thread_timed, scm_timed_lock_mutex)
(scm_timed_wait_condition_variable, scm_std_select): Adapt.
| Andy Wingo | 2016-11-13 | 4 | -22/+16 |
* | Unlocked mutexes don't have owners...* libguile/threads.c (scm_unlock_mutex)
(scm_timed_wait_condition_variable): Unlocked mutexes should never
have owners.
| Andy Wingo | 2016-11-13 | 1 | -4/+10 |