Browse code
Rejigger things...
Ed Langley authored on 11/03/2019 00:17:18
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -22,9 +22,12 @@ |
22 | 22 |
|
23 | 23 |
(defgeneric queue (event-loop)) |
24 | 24 |
|
25 |
-(defgeneric register-finish-cb (cb event-loop)) |
|
25 |
+(defgeneric (setf finish-cb) (cb event-loop)) |
|
26 |
+(defgeneric finish-cb (event-loop)) |
|
26 | 27 |
|
27 |
-(defgeneric tick (event-loop)) |
|
28 |
+(defgeneric tick (event-loop) |
|
29 |
+ (:method :around (event-loop) |
|
30 |
+ (call-next-method))) |
|
28 | 31 |
|
29 | 32 |
(defparameter *task-depth* 10) |
30 | 33 |
|
... | ... |
@@ -34,12 +37,14 @@ |
34 | 37 |
|
35 | 38 |
(defun run-loop (event-loop) |
36 | 39 |
(let ((finished nil)) |
37 |
- (register-finish-cb (lambda () |
|
38 |
- (setf finished t)) |
|
39 |
- event-loop) |
|
40 |
+ (setf (finish-cb event-loop) |
|
41 |
+ (lambda () |
|
42 |
+ (setf finished t))) |
|
40 | 43 |
(prepare-loop event-loop) |
41 | 44 |
(unwind-protect (until-finished finished |
42 |
- (tick event-loop)) |
|
45 |
+ (with-simple-restart (continue "continue event loop") |
|
46 |
+ (tick event-loop))) |
|
47 |
+ (format t "unwinding...") |
|
43 | 48 |
(cleanup event-loop)))) |
44 | 49 |
|
45 | 50 |
(defun wait-for-promise (promise) |