Mercurial > octave
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 |