@@ -127,7 +127,7 @@ module Timer = struct
127
127
ivar : [ `Ok | `Cancelled ] Fiber.Ivar .t ;
128
128
scheduled : Lev.Timestamp .t ;
129
129
mutable filled : bool ;
130
- wheel : running ;
130
+ wheel : t ;
131
131
}
132
132
133
133
and running = {
@@ -169,8 +169,8 @@ module Timer = struct
169
169
Fiber. of_thunk (fun () ->
170
170
match ! t with
171
171
| Stopped -> Code_error. raise " Wheel.task" []
172
- | Running t ->
173
- let now = Lev.Loop. now t .scheduler.loop in
172
+ | Running wheel ->
173
+ let now = Lev.Loop. now wheel .scheduler.loop in
174
174
let data =
175
175
{
176
176
wheel = t;
@@ -179,26 +179,29 @@ module Timer = struct
179
179
filled = false ;
180
180
}
181
181
in
182
- let res = Removable_queue. push t .queue data in
183
- let + () = wakeup_if_waiting t in
182
+ let res = Removable_queue. push wheel .queue data in
183
+ let + () = wakeup_if_waiting wheel in
184
184
ref res)
185
185
186
186
let reset (task : task ) =
187
187
Fiber. of_thunk (fun () ->
188
188
let task' = Removable_queue. data ! task in
189
- Removable_queue. remove ! task;
190
- let now = Lev.Loop. now task'.wheel.scheduler.loop in
191
- let filled = task'.filled in
192
- let task' =
193
- let task' = { task' with scheduled = now } in
194
- if filled then (
195
- task'.filled < - false ;
196
- { task' with ivar = Fiber.Ivar. create () })
197
- else task'
198
- in
199
- let new_task = Removable_queue. push task'.wheel.queue task' in
200
- task := new_task;
201
- if filled then wakeup_if_waiting task'.wheel else Fiber. return () )
189
+ match ! (task'.wheel) with
190
+ | Stopped -> Code_error. raise " reset: wheel is stopped" []
191
+ | Running wheel ->
192
+ Removable_queue. remove ! task;
193
+ let now = Lev.Loop. now wheel.scheduler.loop in
194
+ let filled = task'.filled in
195
+ let task' =
196
+ let task' = { task' with scheduled = now } in
197
+ if filled then (
198
+ task'.filled < - false ;
199
+ { task' with ivar = Fiber.Ivar. create () })
200
+ else task'
201
+ in
202
+ let new_task = Removable_queue. push wheel.queue task' in
203
+ task := new_task;
204
+ if filled then wakeup_if_waiting wheel else Fiber. return () )
202
205
203
206
let await (task : task ) =
204
207
Fiber. of_thunk (fun () ->
@@ -243,7 +246,7 @@ module Timer = struct
243
246
Queue. push r.scheduler.queue (Fiber. Fill (task.ivar, `Ok )));
244
247
Fiber. return () )
245
248
else
246
- let scheduler = task.wheel .scheduler in
249
+ let scheduler = r .scheduler in
247
250
let ivar = Fiber.Ivar. create () in
248
251
let timer =
249
252
Lev.Timer. create ~after (fun timer ->
0 commit comments