This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/main by this push:
     new bf13598  DISPATCH-1274: avoid sharing mutex between timer and server
bf13598 is described below

commit bf1359829afbf126ad5dc0dd6bf76ebf34f08bac
Author: Kenneth Giusti <[email protected]>
AuthorDate: Wed Aug 25 16:37:09 2021 -0400

    DISPATCH-1274: avoid sharing mutex between timer and server
    
    Historically the qd_server_t and the timer subsystem have shared a
    single mutex. There is no technical reason for this as each use the
    lock to protect entirely separate critial sections.
    
    Recent analysis of lock usage shows that the timer subsystem makes
    heavy use of the lock.  This patch introduces separate locks as to
    avoid any contention between the qd_server_t and timer operations.
    
    This closes #1350
---
 src/server.c        | 2 +-
 src/timer.c         | 5 +++--
 src/timer_private.h | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/server.c b/src/server.c
index 75527b2..0d46665 100644
--- a/src/server.c
+++ b/src/server.c
@@ -1385,7 +1385,7 @@ qd_server_t *qd_server(qd_dispatch_t *qd, int 
thread_count, const char *containe
     qd_server->cond             = sys_cond();
     DEQ_INIT(qd_server->conn_list);
 
-    qd_timer_initialize(qd_server->lock);
+    qd_timer_initialize();
 
     qd_server->pause_requests         = 0;
     qd_server->threads_paused         = 0;
diff --git a/src/timer.c b/src/timer.c
index 441bbad..d015469 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -279,9 +279,9 @@ void qd_timer_cancel(qd_timer_t *timer)
 //=========================================================================
 
 
-void qd_timer_initialize(sys_mutex_t *server_lock)
+void qd_timer_initialize()
 {
-    lock = server_lock;
+    lock = sys_mutex();
     DEQ_INIT(scheduled_timers);
     time_base = 0;
 }
@@ -289,6 +289,7 @@ void qd_timer_initialize(sys_mutex_t *server_lock)
 
 void qd_timer_finalize(void)
 {
+    sys_mutex_free(lock);
     lock = 0;
 }
 
diff --git a/src/timer_private.h b/src/timer_private.h
index 830c8ff..12c19bc 100644
--- a/src/timer_private.h
+++ b/src/timer_private.h
@@ -22,7 +22,7 @@
 #include "qpid/dispatch/timer.h"
 #include "qpid/dispatch/threading.h"
 
-void qd_timer_initialize(sys_mutex_t *server_lock);
+void qd_timer_initialize(void);
 void qd_timer_finalize(void);
 void qd_timer_visit();
 

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to