[pkg-gnupg-maint] Bug#841143: [PATCH 2/4] gpg-agent connection count: Introduce locking

Ian Jackson ijackson at chiark.greenend.org.uk
Sun Jan 8 22:46:27 UTC 2017


This variable is incremented and decremented by each individual
thread.  It must therefore be protected by a lock.

Rename it to prove we have found all the references.

Signed-off-by: Ian Jackson <ijackson at chiark.greenend.org.uk>
---
 agent/gpg-agent.c | 40 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index 8ca6d92..1f92661 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -386,7 +386,8 @@ static pid_t parent_pid = (pid_t)(-1);
 static pid_t main_thread_pid = (pid_t)(-1);
 
 /* Number of active connections.  */
-static int active_connections;
+static int active_connections_value;
+static npth_mutex_t active_connections_lock;
 
 /* This object is used to dispatch progress messages from Libgcrypt to
  * the right thread.  Given that we will have at max only a few dozen
@@ -1988,18 +1989,47 @@ get_agent_ssh_socket_name (void)
 }
 
 
+static void
+lock_active_connections (void)
+{
+  int err;
+
+  err = npth_mutex_lock (&active_connections_lock);
+  if (err)
+    log_fatal ("failed to acquire active connection count mutex: %s\n",
+	       strerror (err));
+}
+
+static void
+unlock_active_connections (void)
+{
+  int err;
+
+  err = npth_mutex_unlock (&active_connections_lock);
+  if (err)
+    log_fatal ("failed to release active connection count mutex: %s\n",
+	       strerror (err));
+}
+
 /* Return the number of active connections. */
 int
 get_agent_active_connection_count (void)
 {
-  return active_connections;
+  int value;
+
+  lock_active_connections();
+  value = active_connections_value;
+  unlock_active_connections();
+  return value;
 }
 
 /* Increment/decrement the number of active connections. */
 static void
 adjust_agent_active_connections (int delta)
 {
-  active_connections += delta;
+  lock_active_connections();
+  active_connections_value += delta;
+  unlock_active_connections();
 }
 
 
@@ -2780,6 +2810,10 @@ handle_connections (gnupg_fd_t listen_fd,
     { { CHECK_OWN_SOCKET_INTERVAL, 0 }, check_own_socket }
   };
 
+  ret = npth_mutex_init (&active_connections_lock, NULL);
+  if (ret)
+    log_fatal ("error allocating active connections mutex: %s\n",
+	       strerror (ret));
 
   ret = npth_attr_init(&tattr);
   if (ret)
-- 
2.11.0



More information about the pkg-gnupg-maint mailing list