mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-05 19:00:33 -05:00
avoid recursion in dpool
This commit is contained in:
parent
40e97d969a
commit
a40ea8b41b
1 changed files with 17 additions and 13 deletions
|
|
@ -15,19 +15,23 @@ module Bb_queue = struct
|
||||||
if was_empty then Condition.broadcast self.cond;
|
if was_empty then Condition.broadcast self.cond;
|
||||||
Mutex.unlock self.mutex
|
Mutex.unlock self.mutex
|
||||||
|
|
||||||
let pop (self : 'a t) : 'a =
|
let pop (type a) (self : a t) : a =
|
||||||
Mutex.lock self.mutex;
|
let module M = struct
|
||||||
let rec loop () =
|
exception Found of a
|
||||||
if Queue.is_empty self.q then (
|
end in
|
||||||
Condition.wait self.cond self.mutex;
|
try
|
||||||
(loop [@tailcall]) ()
|
Mutex.lock self.mutex;
|
||||||
) else (
|
while true do
|
||||||
let x = Queue.pop self.q in
|
if Queue.is_empty self.q then
|
||||||
Mutex.unlock self.mutex;
|
Condition.wait self.cond self.mutex
|
||||||
x
|
else (
|
||||||
)
|
let x = Queue.pop self.q in
|
||||||
in
|
Mutex.unlock self.mutex;
|
||||||
loop ()
|
raise (M.Found x)
|
||||||
|
)
|
||||||
|
done;
|
||||||
|
assert false
|
||||||
|
with M.Found x -> x
|
||||||
end
|
end
|
||||||
|
|
||||||
module Lock = struct
|
module Lock = struct
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue