Mercurial > octave
view libinterp/corefcn/mx-type-traits.h @ 31633:d9970470108a stable
Remove several race conditions with signal handler (bug #61370).
This patch removes several race conditions between the interpreter and the
Ctrl-C signal handler, as described in more detail in bug #61370.
* libinterp/corefcn/sighandlers.h: Make can_interrupt atomic.
* libinterp/corefcn/sighandlers.cc: Make can_interrupt, signals_caught atomic,
use atomic value read for signals_caught, octave_interrupt_state,
change 1 to true.
* liboctave/util/quit.h: Move octave_interrupt_state and octave_signal_caught
to C++ only code, rewrite octave_quit() function, rewrite OCTAVE_QUIT macro
to use octave_quit_c() function.
* liboctave/util/quit.cc: Make octave_interrupt_state and octave_signal_caught
atomic, add new wrapper function octave_quit_c().
* libinterp/corefcn/interpreter.h: Make octave_initialized atomic.
* libinterp/corefcn/interpreter.cc: Make octave_initialized atomic,
change 0 to false.
* liboctave/util/action-container.h: New namespace "util", make m_val atomic.
* liboctave/util/oct-atomic.c: Reorder preprocessor if-elif-else ladder.
* liboctave/util/cmd-edit.cc: Change 0 to false.
author | Reinhard Resch <r_resch@a1.net> |
---|---|
date | Sat, 03 Dec 2022 10:36:59 -0500 |
parents | 796f54d4ddbf |
children | 597f3ee61a48 |
line wrap: on
line source
//////////////////////////////////////////////////////////////////////// // // Copyright (C) 2020-2022 The Octave Project Developers // // See the file COPYRIGHT.md in the top-level directory of this // distribution or <https://octave.org/copyright/>. // // 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 3 of the License, 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, see // <https://www.gnu.org/licenses/>. // //////////////////////////////////////////////////////////////////////// #if ! defined (octave_mx_type_traits_h) #define octave_mx_type_traits_h 1 #include "octave-config.h" #include "mxtypes.h" #include "oct-inttypes-fwd.h" template <typename T> class mx_type_traits { public: static const mxClassID mx_class; typedef T mx_type; }; template <> class mx_type_traits<bool> { public: static const mxClassID mx_class = mxLOGICAL_CLASS; typedef mxDouble mx_type; }; template <> class mx_type_traits<char> { public: static const mxClassID mx_class = mxCHAR_CLASS; typedef mxChar mx_type; }; template <> class mx_type_traits<double> { public: static const mxClassID mx_class = mxDOUBLE_CLASS; typedef mxDouble mx_type; }; template <> class mx_type_traits<float> { public: static const mxClassID mx_class = mxSINGLE_CLASS; typedef mxSingle mx_type; }; template <> class mx_type_traits<octave_int8> { public: static const mxClassID mx_class = mxINT8_CLASS; typedef mxInt8 mx_type; }; template <> class mx_type_traits<octave_uint8> { public: static const mxClassID mx_class = mxUINT8_CLASS; typedef mxUint8 mx_type; }; template <> class mx_type_traits<octave_int16> { public: static const mxClassID mx_class = mxINT16_CLASS; typedef mxInt16 mx_type; }; template <> class mx_type_traits<octave_uint16> { public: static const mxClassID mx_class = mxUINT16_CLASS; typedef mxUint16 mx_type; }; template <> class mx_type_traits<octave_int32> { public: static const mxClassID mx_class = mxINT32_CLASS; typedef mxInt32 mx_type; }; template <> class mx_type_traits<octave_uint32> { public: static const mxClassID mx_class = mxUINT32_CLASS; typedef mxUint32 mx_type; }; template <> class mx_type_traits<octave_int64> { public: static const mxClassID mx_class = mxINT64_CLASS; typedef mxInt64 mx_type; }; template <> class mx_type_traits<octave_uint64> { public: static const mxClassID mx_class = mxUINT64_CLASS; typedef mxUint64 mx_type; }; #endif