Author: brane
Date: Sat May 30 18:52:38 2026
New Revision: 1934784
Log:
Never mix atomic and non-atomic access to a variable, except during
static initialization.
* subversion/svnserve/svnserve.c
(sigtermint_seen): Mark volatile, per the apr_atomic API contract.
(accept_connection, sub_main): Use svn_atomic_read() to get the value
of sigtermint_seen. This variable is set to 1 with svn_atomic_set()
in sigtermint_handler().
Modified:
subversion/trunk/subversion/svnserve/svnserve.c
Modified: subversion/trunk/subversion/svnserve/svnserve.c
==============================================================================
--- subversion/trunk/subversion/svnserve/svnserve.c Sat May 30 18:45:04
2026 (r1934783)
+++ subversion/trunk/subversion/svnserve/svnserve.c Sat May 30 18:52:38
2026 (r1934784)
@@ -495,7 +495,7 @@ static void sigchld_handler(int signo)
#endif
#ifdef APR_HAVE_SIGACTION
-static svn_atomic_t sigtermint_seen = 0;
+static volatile svn_atomic_t sigtermint_seen = 0;
static void
sigtermint_handler(int signo)
{
@@ -559,7 +559,7 @@ accept_connection(connection_t **connect
status = apr_socket_accept(&(*connection)->usock, sock,
connection_pool);
#if APR_HAVE_SIGACTION
- if (sigtermint_seen)
+ if (svn_atomic_read(&sigtermint_seen))
break;
#endif
if (handling_mode == connection_mode_fork)
@@ -579,7 +579,7 @@ accept_connection(connection_t **connect
if (!status)
return SVN_NO_ERROR;
#if APR_HAVE_SIGACTION
- else if (sigtermint_seen)
+ else if (svn_atomic_read(&sigtermint_seen))
return SVN_NO_ERROR;
#endif
else
@@ -1368,7 +1368,7 @@ sub_main(int *exit_code,
SVN_ERR(accept_connection(&connection, sock, ¶ms, handling_mode,
pool));
#if APR_HAVE_SIGACTION
- if (sigtermint_seen)
+ if (svn_atomic_read(&sigtermint_seen))
break;
#endif
if (run_mode == run_mode_listen_once)