Mercurial > hg > octave-lyh
changeset 4571:ef4bdde0805d
[project @ 2003-10-30 16:48:09 by jwe]
author | jwe |
---|---|
date | Thu, 30 Oct 2003 16:48:09 +0000 |
parents | 32b491743d40 |
children | 4623ef02a605 |
files | libcruft/ChangeLog libcruft/Makefile.in libcruft/misc/Makefile.in libcruft/misc/cquit.c libcruft/misc/quit.cc |
diffstat | 5 files changed, 106 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/libcruft/ChangeLog +++ b/libcruft/ChangeLog @@ -1,3 +1,13 @@ +2003-10-30 John W. Eaton <jwe@bevo.che.wisc.edu> + + * Makefile.in (MISC_OBJ): Add misc/cquit.o to the list. + + * misc/Makefile.in (SPECIAL_SRC): Add cquit.c to the list. + * misc/cquit.c: New file. + * misc/quit.cc: Move everything except octave_interrupt_hook, + octave_bad_alloc_hook, octave_throw_interrupt_exception, and + octave_throw_bad_alloc to cquit.c. + 2003-10-28 John W. Eaton <jwe@bevo.che.wisc.edu> * misc/quit.h (octave_interrupt_hook, octave_bad_alloc_hook):
--- a/libcruft/Makefile.in +++ b/libcruft/Makefile.in @@ -62,7 +62,7 @@ # a normal archive file (created from PIC code, though). MISC_OBJ := misc/machar.o misc/f77-extern.o \ - misc/f77-fcn.o misc/lo-error.o misc/quit.o + misc/f77-fcn.o misc/lo-error.o misc/quit.o misc/cquit.o CRUFT_FSRC := $(foreach dir, $(SUBDIRS), $(wildcard $(srcdir)/$(dir)/*.f)) CRUFT_OBJ2 := $(patsubst $(srcdir)/%, %, $(CRUFT_FSRC))
--- a/libcruft/misc/Makefile.in +++ b/libcruft/misc/Makefile.in @@ -12,7 +12,7 @@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ -SPECIAL_SRC := machar.c f77-extern.cc f77-fcn.c lo-error.c quit.cc +SPECIAL_SRC := machar.c f77-extern.cc f77-fcn.c lo-error.c cquit.c quit.cc DEP_1 := $(patsubst %.c, %.d, $(SPECIAL_SRC)) MAKEDEPS := $(patsubst %.cc, %.d, $(DEP_1))
new file mode 100644 --- /dev/null +++ b/libcruft/misc/cquit.c @@ -0,0 +1,94 @@ +/* + +Copyright (C) 2003 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <signal.h> +#include <string.h> + +#include "quit.h" + +octave_jmp_buf current_context; + +void +octave_save_current_context (void *save_buf) +{ + memcpy (save_buf, current_context, sizeof (octave_jmp_buf)); +} + +void +octave_restore_current_context (void *save_buf) +{ + memcpy (current_context, save_buf, sizeof (octave_jmp_buf)); +} + +void +octave_jump_to_enclosing_context (void) +{ +#if defined (OCTAVE_HAVE_SIG_JUMP) + siglongjmp (current_context, 1); +#else + longjmp (current_context, 1); +#endif +} + +// Allow us to save the signal mask and then restore it to the most +// recently saved value. This is necessary when using the POSIX +// signal handling interface on some systems calling longjmp out of +// the signal handler to get to the top level on an interrupt doesn't +// restore the original signal mask. Alternatively, we could use +// sigsetjmp/siglongjmp, but saving and restoring the signal mask +// ourselves works ok and seems simpler just now. + +#if defined (HAVE_POSIX_SIGNALS) +static sigset_t octave_signal_mask; +#endif + +void +octave_save_signal_mask (void) +{ +#if defined (HAVE_POSIX_SIGNALS) + sigprocmask (0, 0, &octave_signal_mask); +#endif +} + +void +octave_restore_signal_mask (void) +{ +#if defined (HAVE_POSIX_SIGNALS) + sigprocmask (SIG_SETMASK, &octave_signal_mask, 0); +#endif +} + +sig_atomic_t octave_interrupt_immediately = 0; + +sig_atomic_t octave_interrupt_state = 0; + +sig_atomic_t octave_allocation_error = 0; + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/
--- a/libcruft/misc/quit.cc +++ b/libcruft/misc/quit.cc @@ -28,75 +28,12 @@ #include <new> -// Include signal.h, not csignal since the latter might only define -// the ANSI standard C signal interface. - -#include <signal.h> - #include "quit.h" -octave_jmp_buf current_context; - void (*octave_interrupt_hook) (void) = 0; void (*octave_bad_alloc_hook) (void) = 0; void -octave_save_current_context (void *save_buf) -{ - std::memcpy (save_buf, current_context, sizeof (octave_jmp_buf)); -} - -void -octave_restore_current_context (void *save_buf) -{ - std::memcpy (current_context, save_buf, sizeof (octave_jmp_buf)); -} - -void -octave_jump_to_enclosing_context (void) -{ -#if defined (OCTAVE_HAVE_SIG_JUMP) - siglongjmp (current_context, 1); -#else - longjmp (current_context, 1); -#endif -} - -// Allow us to save the signal mask and then restore it to the most -// recently saved value. This is necessary when using the POSIX -// signal handling interface on some systems calling longjmp out of -// the signal handler to get to the top level on an interrupt doesn't -// restore the original signal mask. Alternatively, we could use -// sigsetjmp/siglongjmp, but saving and restoring the signal mask -// ourselves works ok and seems simpler just now. - -#if defined (HAVE_POSIX_SIGNALS) -static sigset_t octave_signal_mask; -#endif - -void -octave_save_signal_mask (void) -{ -#if defined (HAVE_POSIX_SIGNALS) - sigprocmask (0, 0, &octave_signal_mask); -#endif -} - -void -octave_restore_signal_mask (void) -{ -#if defined (HAVE_POSIX_SIGNALS) - sigprocmask (SIG_SETMASK, &octave_signal_mask, 0); -#endif -} - -sig_atomic_t octave_interrupt_immediately = 0; - -sig_atomic_t octave_interrupt_state = 0; - -sig_atomic_t octave_allocation_error = 0; - -void octave_throw_interrupt_exception (void) { if (octave_interrupt_hook)