summaryrefslogtreecommitdiff
path: root/libguile/async.h
Commit message (Expand)AuthorAgeFilesLines
* 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 Wingo2016-12-291-4/+14
* 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 Wingo2016-11-211-1/+0
* 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 Wingo2016-11-191-0/+3
* 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 Wingo2016-11-131-1/+1
* Deprecate critical sections...* NEWS: Deprecate critical sections. * doc/ref/api-scheduling.texi (Critical Sections): Remove. * libguile/async.c: * libguile/async.h: * libguile/deprecated.c: * libguile/deprecated.h: * libguile/threads.c: * libguile/threads.h: Deprecate critical section API. Andy Wingo2016-11-011-8/+0
* Simplify critical section implementation...* libguile/async.h (SCM_CRITICAL_SECTION_START) (SCM_CRITICAL_SECTION_END): Define in just one way. * libguile/async.c (critical_section_mutex): New static variable. (scm_critical_section_start, scm_critical_section_end): Inline internal body of critical section gates. (scm_init_async): Init critical_section_mutex. * libguile/threads.c (scm_threads_prehistory): Don't declare critical section mutex here. Andy Wingo2016-11-011-30/+2
* Remove unused internal definitions...* libguile/async.h (scm_i_pthread_mutex_lock_block_asyncs) (scm_i_pthread_mutex_unlock_unblock_asyncs): Remove unused internal definitions. Andy Wingo2016-11-011-16/+0
* Use atomics for async interrupts...* libguile/__scm.h (SCM_TICK): Always define as scm_async_tick(). * libguile/error.c (scm_syserror, scm_syserror_msg): * libguile/fports.c (fport_read, fport_write): * libguile/_scm.h (SCM_SYSCALL): Replace SCM_ASYNC_TICK with scm_async_tick (). (SCM_ASYNC_TICK, SCM_ASYNC_TICK_WITH_CODE) (SCM_ASYNC_TICK_WITH_GUARD_CODE): Remove internal definitions. We inline into vm-engine.c, the only place where it matters. * libguile/async.h: * libguile/async.c (scm_async_tick, scm_i_setup_sleep): (scm_i_reset_sleep, scm_system_async_mark_for_thread): * libguile/threads.h (struct scm_thread_wake_data): * libguile/threads.h (scm_i_thread): * libguile/threads.c (block_self, guilify_self_1, scm_std_select): Rewrite to use sequentially-consistent atomic references. * libguile/atomics-internal.h (scm_atomic_set_pointer): (scm_atomic_ref_pointer): New definitions. * libguile/finalizers.c (queue_finalizer_async): We can allocate, so just use scm_system_async_mark_for_thread instead of the set-cdr! shenanigans. * libguile/scmsigs.c (take_signal): * libguile/gc.c (queue_after_gc_hook): Adapt to new asyncs mechanism. Can't allocate but we're just manipulating the current thread when no other threads are running so we should be good. * libguile/vm-engine.c (VM_HANDLE_INTERRUPTS): Inline the async_tick business. Andy Wingo2016-10-261-1/+0
* Deprecate user asyncs...* libguile/async.c: * libguile/async.h: * libguile/deprecated.c: * libguile/deprecated.h (scm_async, scm_async_mark, scm_run_asyncs): Deprecate these functions, which comprise the "users asyncs" facility. * module/oop/goops.scm: Adapt to <async> deprecation. * doc/ref/api-scheduling.texi: * doc/ref/libguile-concepts.texi: * doc/ref/libguile-foreign-objects.texi: * doc/ref/posix.texi: Remove documentation on user asyncs, and replace references to "system asyncs" to be just "asyncs". Andy Wingo2016-10-171-3/+0
* Merge branch 'stable-2.0'...Conflicts: benchmark-suite/benchmarks/ports.bm libguile/async.h libguile/bytevectors.c libguile/foreign.c libguile/gsubr.c libguile/srfi-1.c libguile/vm-engine.h libguile/vm-i-scheme.c module/Makefile.am module/language/tree-il/analyze.scm module/language/tree-il/peval.scm module/scripts/compile.scm module/scripts/disassemble.scm test-suite/tests/asm-to-bytecode.test test-suite/tests/peval.test test-suite/tests/rdelim.test Mark H Weaver2014-09-301-5/+6
|\
| * Mark system async functions as SCM_API....Fixes <http://bugs.gnu.org/17661>. Reported and fixed by Chris Vine <chris@cvine.freeserve.co.uk>. * libguile/async.h (scm_c_call_with_blocked_asyncs) (scm_c_call_with_unblocked_asyncs, scm_dynwind_block_asyncs) (scm_dynwind_unblock_asyncs): Mark as SCM_API. * THANKS: Add Chris Vine to fixes section. Mark H Weaver2014-06-011-5/+6
* | Merge commit '8571dbde639e0ee9885bad49c9e180474bd23646'...Conflicts: libguile/procprop.c Andy Wingo2013-11-281-0/+16
|\|
| * Add mutex locking functions that also block asyncs....* libguile/async.h (scm_i_pthread_mutex_lock_block_asyncs, scm_i_pthread_mutex_unlock_unblock_asyncs): New macros. * libguile/threads.c (do_unlock_with_asyncs): New static helper. (scm_i_dynwind_pthread_mutex_lock_block_asyncs): New function. * libguile/threads.h (scm_i_dynwind_pthread_mutex_lock_block_asyncs): Add prototype. Mark H Weaver2013-11-231-0/+16
* | rename scm_async_click() to scm_async_tick(); privatize SCM_ASYNC_TICK...* libguile/_scm.h (SCM_ASYNC_TICK, SCM_ASYNC_TICK_WITH_CODE): Make these definitions private. Call the tick() function instead of click(). * libguile/__scm.h: * libguile/async.h (scm_async_tick): Move declaration here. Remove scm_async_click declaration. Tick is the new (and old!) click, you see. (SCM_CRITICAL_SECTION_END): Call tick() instead of click(). * libguile/async.c (scm_async_tick): Remove old definition, and rename scm_async_click to scm_async_tick. (decrease_block): Adapt to click() -> tick() name change. * libguile/deprecated.h (scm_async_click, SCM_ASYNC_TICK): Define some GONE macros. * libguile/threads.c (fat_mutex_unlock): Tick() instead of click(). Andy Wingo2011-05-151-2/+2
* | remove all deprecated code...* libguile/async.c: * libguile/async.h: * libguile/debug.h: * libguile/deprecated.c: * libguile/deprecated.h: * libguile/evalext.h: * libguile/gc-malloc.c: * libguile/gc.h: * libguile/gen-scmconfig.c: * libguile/numbers.c: * libguile/ports.c: * libguile/ports.h: * libguile/procprop.c: * libguile/procprop.h: * libguile/read.c: * libguile/socket.c: * libguile/srfi-4.h: * libguile/strings.c: * libguile/strings.h: * libguile/tags.h: * module/ice-9/boot-9.scm: * module/ice-9/deprecated.scm: Remove all deprecated code. CPP defines that were not previously issuing warnings were changed so that their expansions would indicate the replacement forms to use, e.g. scm_sizet__GONE__REPLACE_WITH__size_t. The two exceptions were SCM_LISTN, which did not produce warnings before, and the string-filter argument order stuff. Drops the initial dirty memory usage of Guile down to 2.8 MB on my machine, from 4.4 MB. Andy Wingo2011-05-121-9/+1
|/
* Arrange so that `SCM_I_CURRENT_THREAD' is not accessed outside of libguile....* libguile/__scm.h (scm_async_tick): New declaration. (SCM_ASYNC_TICK)[!BUILDING_LIBGUILE]: Use `scm_async_tick ()'. * libguile/async.c (scm_critical_section_start, scm_critical_section_end, scm_async_tick): New functions. * libguile/async.h (scm_i_critical_section_mutex): Made internal. (scm_critical_section_start, scm_critical_section_end): New declarations. (SCM_CRITICAL_SECTION_START, SCM_CRITICAL_SECTION_END)[!BUILDING_LIBGUILE]: Use the same-named function (lower-case). * libguile/stackchk.h (SCM_STACK_OVERFLOW_P): Conditionalize on `BUILDING_LIBGUILE'. * libguile/threads.h (SCM_I_CURRENT_THREAD, scm_i_dynwinds, scm_i_set_dynwinds, scm_i_last_debug_frame, scm_i_set_last_debug_frame): Conditionalize on `BUILDING_LIBGUILE'. Ludovic Courtès2009-10-091-11/+23
* Deprecate `scm_mask_ints'....* libguile/async.h (scm_mask_ints): Remove. * libguile/deprecated.c (scm_i_mask_ints): New. * libguile/deprecated.h (scm_mask_ints): New macro. (scm_i_mask_ints): New declaration. Ludovic Courtès2009-10-091-4/+0
* Use `SCM_DEPRECATED' in declarations of deprecated functions/variables....* libguile/deprecated.c (SCM_BUILDING_DEPRECATED_CODE): New macro. * libguile/async.c (SCM_BUILDING_DEPRECATED_CODE): Likewise. * libguile/macros.c (SCM_BUILDING_DEPRECATED_CODE): Likewise. * libguile/async.h, libguile/deprecated.h, libguile/eval.h, libguile/gc.h, libguile/gc.h, libguile/macros.h, libguile/ports.h, libguile/srfi-4.h, libguile/strings.h: Change declarations of deprecated functions and variables to use `SCM_DEPRECATED' instead of `SCM_API'. Ludovic Courtès2009-10-021-4/+4
* Fix spurious `throw from within critical section' errors...The crux of this problem was that the thread doing a throw, and so checking scm_i_critical_section_level, was different from the thread that was in a critical section. * libguile/async.h (scm_i_critical_section_level): Removed, replaced by per-thread critical_section_level. (SCM_CRITICAL_SECTION_START, SCM_CRITICAL_SECTION_END): Use per-thread critical_section_level. * libguile/continuations.c (scm_dynthrow): Check per-thread critical_section_level. * libguile/threads.c (guilify_self_1): Init per-thread critical_section_level. (scm_i_critical_section_level): Removed. * libguile/threads.h (scm_i_thread): New critical_section_level field. * libguile/throw.c (scm_ithrow): Check per-thread critical_section_level. Neil Jerram2009-09-301-5/+3
* Change Guile license to LGPLv3+...(Not quite finished, the following will be done tomorrow. module/srfi/*.scm module/rnrs/*.scm module/scripts/*.scm testsuite/*.scm guile-readline/* ) Neil Jerram2009-06-171-6/+7
* Add `SCM_INTERNAL' macro, use it.Ludovic Courtès2008-05-311-6/+7
* merge from 1.8 branchKevin Ryde2006-04-171-1/+1
* Renamed the "frames" that are related to dynamic-wind to "dynamic...contexts. Renamed all functions from scm_frame_ to scm_dynwind_. Updated documentation. Marius Vollmer2006-01-291-2/+2
* The FSF has a new address.Marius Vollmer2005-05-231-1/+1
* * async.h (scm_mask_ints): Removed left over reference to...scm_root. * threads.c: Removed fprintf debug statements. Mikael Djurfeldt2005-03-241-2/+2
* * threads.h, async.h, threads.c (SCM_CRITICAL_SECTION_START,...SCM_CRITICAL_SECTION_END): Moved here from threads.h since now they also block/unblock execution of asyncs and call scm_async_click which is declared in async.h but threads.h can not include async.h since async.h already includes threads.h. (scm_i_critical_section_level): New, for checking mistakes in the use of the SCM_CRITICAL_SECTION_* macros. (scm_i_critical_section_mutex): Make it a recursive mutex so that critical sections can be nested. * threads.h, threads.c (scm_frame_lock_mutex): New. (scm_frame_critical_section): Take mutex as argument. (framed_critical_section_mutex): New, used as default for above. (scm_init_threads): Initialize it. (scm_threads_prehistory): Do not initialize thread_admin_mutex and scm_i_critical_section_mutex; both are initialized statically. Marius Vollmer2005-03-071-0/+26
* See ChangeLog from 2005-03-02.Marius Vollmer2005-03-021-1/+6
* Did the follwing renamings: scm_with_blocked_asyncs ->...scm_frame_block_asyncs, scm_with_unblocked_asyncs -> scm_frame_unblock_asyncs. Changed all uses. Marius Vollmer2004-01-071-2/+2
* (scm_with_blocked_asyncs, scm_with_unblocked_asyncs): New.Marius Vollmer2004-01-041-1/+3
* Changed license terms to the plain LGPL thru-out.Marius Vollmer2003-04-051-35/+11
* * async.h, async.c (scm_system_async): Fixed deprecation to work...correctly when deprecated features are excluded. Dirk Herrmann2002-10-191-1/+1
* * evalext.h: Replaced SCM_DEBUG_DEPRECATED with !SCM_ENABLE_DEPRECATED.Dirk Herrmann2002-10-131-1/+1
* * async.h (scm_call_with_blocked_asyncs,...scm_call_with_unblocked_asyncs, scm_c_call_with_blocked_asyncs, scm_c_call_with_unblocked_asyncs): New prototypes. (scm_mask_signals, scm_unmask_signals): Deprecated. (scm_mask_ints): Turned into a macro. * async.c (scm_mask_ints): Removed. (scm_run_asyncs): Do not set scm_mask_ints while running an async. this should not be necessary. (scm_async_click): Test block_asyncs instead of scm_mask_ints. (scm_mask_signals, scm_unmask_signals): Deprecated. Emit deprecation warning and check for errornous use. Set block_asyncs instead of scm_mask_ints. (increase_block, decrease_block, scm_call_with_blocked_asyncs, scm_call_with_unblocked_asyncs, scm_c_call_with_blocked_asyncs, scm_c_call_with_unblocked_asyncs): New. Marius Vollmer2002-10-091-2/+11
* * async.h (scm_asyncs_pending, scm_set_tick_rate,...scm_set_switch_rate, scm_system_async_mark_from_signal_handler): Removed prototypes. (scm_i_queue_async_cell): New. Marius Vollmer2002-10-041-4/+2
* (scm_system_async_mark_for_thread): New prototype.Marius Vollmer2002-10-031-1/+2
* (scm_system_async_mark_from_signal_handler): New.Marius Vollmer2001-11-251-0/+1
* Prefixed each each exported symbol with SCM_API.Marius Vollmer2001-11-021-15/+15
* * Renamed header macros to the SCM_<filename>_H format.Dirk Herrmann2001-08-311-1/+2
* * alist.c, arbiters.c, async.h, backtrace.h, boolean.c, chars.c,... chars.h, continuations.h, debug-malloc.h, dynl.c, feature.c, feature.h, filesys.h, fluids.h, fports.h, gc_os_dep.c, gdb_interface.h, gh_eval.c, gh_funcs.c, gh_io.c, gh_list.c, gh_predicates.c, gsubr.c, gsubr.h, guardians.h, guile-func-name-check.in, guile-snarf-docs-texi.in, guile-snarf-docs.in, guile-snarf.awk.in, guile-snarf.in, hashtab.h, iselect.h, keywords.h, lang.c, list.h, load.h, objprop.c, objprop.h, options.c, options.h, random.h, regex-posix.h, root.c, root.h, script.c, snarf.h, stackchk.c, strerror.c, strop.h, strports.h, threads.h, values.c, values.h, version.c, version.h: Updated copyright notice. Martin Grabmüller2001-07-191-1/+1
* Remove "face-lift" comment.Thien-Thi Nguyen2001-07-091-2/+0
* Make compilation under Windows easier.Martin Grabmüller2001-06-261-3/+3
* * Cleaned up initialization of asyncs....* Moved handling of scm_gc_async to gc.c. * Extracted handling of scheme level after-gc-hook from gc core. Dirk Herrmann2000-06-281-2/+1
* * async.[ch]: unexpose low-level async access macros (thanks to...Dirk Herrmann). * validate.h: move async validation macros to async.c (nobody else needs them anyway), and rename them. Michael Livshin2000-04-051-7/+0
* * async.h: kill the scm_async_t struct. having a heap cell...pretending to be a C struct is not helthy, and is not needed here anyway, as asyncs happily fit in one heap cell. * async.c: reflect the fact that asyncs are now represented by single heap cell each. Michael Livshin2000-04-041-9/+6
* * *.[hc]: add Emacs magic at the end of file, to ensure GNU... indentation style. Michael Livshin2000-03-191-0/+6
* * async.c, async.h: made async representation a double cell.Mikael Djurfeldt2000-03-141-3/+3
* * list.c: Moved append docs to append! Thanks Dirk Hermann. Also,...added append docs from R4RS. * strings.c: Docstring typo fix, + eliminate unneeded IMP tests. Thanks Dirk Hermann! * chars.h: Provide SCM_CHARP, SCM_CHAR, SCM_MAKE_CHAR and deprecate SCM_ICHRP, SCM_ICHR, SCM_MAKICHR. Thanks Dirk Hermann! * *.h, *.c: Use SCM_CHARP, SCM_CHAR, SCM_MAKE_CHAR throughout. Drop use of SCM_P for function prototypes... assume an ANSI C compiler. Thanks Dirk Hermann! Greg J. Badros2000-03-021-14/+14
* * *.h: Use SCM_NIMP(X) && in all the FOOP macros....* *.[ch]: Use do { ... } while (0) idiom in macros that expanded to a bare block. Greg J. Badros1999-12-161-1/+4
* * __scm.h, alist.c, async.c, async.h, backtrace.h, chars.c,...continuations.c, debug.c, debug.h, dynl-dl.c, dynl.c, dynl.h, dynwind.c, dynwind.h, eq.c, error.c, error.h, eval.c, eval.h, feature.c, filesys.c, filesys.h, fports.c, fports.h, gc.c, gc.h, genio.c, genio.h, gh.h, gh_data.c, gsubr.c, gsubr.h, hash.c, hashtab.c, init.c, init.h, ioext.c, ioext.h, kw.c, libguile.h, list.c, list.h, load.c, load.h, mallocs.c, markers.c, mit-pthreads.c, net_db.c, numbers.c, numbers.h, options.c, ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c, procprop.h, procs.c, procs.h, ramap.c, ramap.h, regex-posix.c, regex-posix.h, root.c, root.h, scmsigs.c, scmsigs.h, script.c, script.h, simpos.c, simpos.h, smob.c, smob.h, snarf.h, socket.c, srcprop.c, stackchk.c, stackchk.h, stacks.c, stime.c, stime.h, strings.c, strings.h, strports.c, struct.c, struct.h, symbols.c, symbols.h, tags.h, threads.c, throw.h, unif.c, variable.c, vectors.c, vectors.h, version.h, vports.c, weaks.c: Update copyright years. Jim Blandy1998-10-191-1/+1
* * async.c, async.h (asyncs_pending): Renamed asyncs_pending -->...scm_asyncs_pending and made it global. Mikael Djurfeldt1998-01-301-0/+1