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, &params, 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)

Reply via email to