From: Cristian Rodríguez Date: Wed, 10 Dec 2025 19:30:00 +0000 (-0300) Subject: variable "sigterm" must be volatile sig_atomic_t X-Git-Tag: mdadm-4.6~12 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=4ce55843ce4eac37c7cc448eafc33675908be43b;p=thirdparty%2Fmdadm.git variable "sigterm" must be volatile sig_atomic_t Signals handlers can only read/write to volatile sig_atomic_t variables or atomic lock-free ones. Anything else results in undefined behaviour. Signed-off-by: Cristian Rodríguez --- diff --git a/Grow.c b/Grow.c index b2cdd893..083b1c26 100644 --- a/Grow.c +++ b/Grow.c @@ -2985,7 +2985,7 @@ static int impose_level(int fd, int level, char *devname, int verbose) return 0; } -int sigterm = 0; +volatile sig_atomic_t sigterm = 0; static void catch_term(int sig) { sigterm = 1; diff --git a/mdmon.c b/mdmon.c index a16647c6..302d0248 100644 --- a/mdmon.c +++ b/mdmon.c @@ -74,7 +74,7 @@ struct active_array *pending_discard; int mon_tid, mgr_tid; -int sigterm; +volatile sig_atomic_t sigterm; #ifdef USE_PTHREADS static void *run_child(void *v) diff --git a/mdmon.h b/mdmon.h index ce6218a2..37f5841a 100644 --- a/mdmon.h +++ b/mdmon.h @@ -81,7 +81,7 @@ extern struct md_generic_cmd *active_cmd; void remove_pidfile(char *devname); void do_monitor(struct supertype *container); void do_manager(struct supertype *container); -extern int sigterm; +extern volatile sig_atomic_t sigterm; int read_dev_state(int fd); bool is_container_member(struct mdstat_ent *mdstat, char *container);