[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