DISPATCH-1274: Separate qd_timer_t lock from server
qd_timer_t was sharing a lock with qd_server_t for historical reasons.
Code inspection shows there is no need for the sharing.
- timer.c calls qd_server_timeout() which is thread-safe, and no other server functions.
- timer calls handlers outside the lock so it doesn't mater what lock is used.
diff --git a/src/server.c b/src/server.c
index 1863546..760126d 100644
--- a/src/server.c
+++ b/src/server.c
@@ -1227,7 +1227,7 @@
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 0fd87c7..c76f77d 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -182,10 +182,10 @@
//=========================================================================
-void qd_timer_initialize(sys_mutex_t *server_lock)
+void qd_timer_initialize()
{
qd_immediate_initialize();
- lock = server_lock;
+ lock = sys_mutex();
DEQ_INIT(idle_timers);
DEQ_INIT(scheduled_timers);
time_base = 0;
@@ -194,6 +194,7 @@
void qd_timer_finalize(void)
{
+ sys_mutex_free(lock);
lock = 0;
qd_immediate_finalize();
}
diff --git a/src/timer_private.h b/src/timer_private.h
index 263fca5..9f6f1cb 100644
--- a/src/timer_private.h
+++ b/src/timer_private.h
@@ -36,7 +36,7 @@
DEQ_DECLARE(qd_timer_t, qd_timer_list_t);
-void qd_timer_initialize(sys_mutex_t *server_lock);
+void qd_timer_initialize(void);
void qd_timer_finalize(void);
void qd_timer_visit();