comparison libinterp/corefcn/interpreter.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 aac27ad79be6
children 7d3467f8d713
comparison
equal deleted inserted replaced
31631:ec1f34091635 31633:d9970470108a
26 #if ! defined (octave_interpreter_h) 26 #if ! defined (octave_interpreter_h)
27 #define octave_interpreter_h 1 27 #define octave_interpreter_h 1
28 28
29 #include "octave-config.h" 29 #include "octave-config.h"
30 30
31 #include <atomic>
31 #include <map> 32 #include <map>
32 #include <set> 33 #include <set>
33 #include <stack> 34 #include <stack>
34 #include <string> 35 #include <string>
35 36
64 // TRUE means we are ready to interpret commands, but not everything 65 // TRUE means we are ready to interpret commands, but not everything
65 // is ready for interactive use. 66 // is ready for interactive use.
66 extern OCTINTERP_API bool octave_interpreter_ready; 67 extern OCTINTERP_API bool octave_interpreter_ready;
67 68
68 // TRUE means we've processed all the init code and we are good to go. 69 // TRUE means we've processed all the init code and we are good to go.
69 extern OCTINTERP_API bool octave_initialized; 70 extern OCTINTERP_API std::atomic<bool> octave_initialized;
70 71
71 #include "oct-time.h" 72 #include "oct-time.h"
72 73
73 OCTAVE_BEGIN_NAMESPACE(octave) 74 OCTAVE_BEGIN_NAMESPACE(octave)
74 75