Skip to content

Commit 73db589

Browse files
committed
bucket_table: Use with_lock for mutexes
Signed-off-by: Christian Pardillo Laursen <[email protected]>
1 parent 8f01b72 commit 73db589

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

ocaml/libs/rate-limit/bucket_table.ml

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ let rec worker_loop ~bucket ~process_queue ~process_queue_lock
4545
Token_bucket.delay_then_consume bucket cost ;
4646
callback ()
4747
in
48-
Mutex.lock process_queue_lock ;
49-
while Queue.is_empty process_queue && not !should_terminate do
50-
Condition.wait worker_thread_cond process_queue_lock
51-
done ;
52-
let item_opt = Queue.take_opt process_queue in
53-
Mutex.unlock process_queue_lock ;
48+
let item_opt =
49+
with_lock process_queue_lock (fun () ->
50+
while Queue.is_empty process_queue && not !should_terminate do
51+
Condition.wait worker_thread_cond process_queue_lock
52+
done ;
53+
Queue.take_opt process_queue
54+
)
55+
in
5456
match item_opt with
5557
| None ->
5658
(* Queue is empty only when termination was signalled *)
@@ -102,10 +104,10 @@ let delete_bucket t ~user_agent =
102104
| None ->
103105
()
104106
| Some data ->
105-
Mutex.lock data.process_queue_lock ;
106-
data.should_terminate := true ;
107-
Condition.signal data.worker_thread_cond ;
108-
Mutex.unlock data.process_queue_lock ;
107+
with_lock data.process_queue_lock (fun () ->
108+
data.should_terminate := true ;
109+
Condition.signal data.worker_thread_cond
110+
) ;
109111
Atomic.set t (StringMap.remove user_agent map)
110112

111113
let try_consume t ~user_agent amount =

0 commit comments

Comments
 (0)