summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2017-02-20 13:24:41 +0100
committerAndy Wingo <wingo@pobox.com>2017-02-20 13:24:41 +0100
commit1447b44f3827b8d65e8f5389748a827d8e6e6996 (patch)
tree509ff19042e73817aef3c4400c82c9599a4a3a75
parentUpdate documentation. (diff)
downloadguile-fibers-1447b44f3827b8d65e8f5389748a827d8e6e6996.tar.gz
Update REPL support for run-fibers changes.
* fibers/repl.scm (fibers): Update for new run-fibers changes.
-rw-r--r--fibers/repl.scm37
1 files changed, 26 insertions, 11 deletions
diff --git a/fibers/repl.scm b/fibers/repl.scm
index afb9dc1..3331702 100644
--- a/fibers/repl.scm
+++ b/fibers/repl.scm
@@ -22,13 +22,11 @@
#:use-module (system repl command)
#:use-module (ice-9 match)
#:use-module (ice-9 format)
- #:use-module ((ice-9 threads) #:select (call-with-new-thread))
+ #:use-module ((ice-9 threads)
+ #:select (call-with-new-thread cancel-thread join-thread))
#:use-module (fibers)
#:use-module (fibers internal))
-(define (sleep-forever)
- (let lp () (sleep 3600) (lp)))
-
(define repl-current-scheds (make-doubly-weak-hash-table))
(define (repl-current-sched repl)
(hashq-ref repl-current-scheds repl))
@@ -48,15 +46,16 @@
(let* ((sched (make-scheduler))
(thread (call-with-new-thread
(lambda ()
- (run-fibers sleep-forever
- #:scheduler sched)))))
+ (run-fibers #:scheduler sched)))))
(when verbose?
- (format #t "No active schedulers; spawned a new one.\n"))
+ (format #t "No active schedulers; spawned a new one (#~a).\n"
+ (scheduler-name sched)))
(repl-set-current-sched! repl sched verbose?)
sched))
(((id . (and sched (? sched-alive?))) . scheds)
(when verbose?
- (format #t "No current scheduler; choosing one randomly.\n"))
+ (format #t "No current scheduler; choosing scheduler #~a randomly.\n"
+ (scheduler-name sched)))
(repl-set-current-sched! repl sched verbose?)
sched)))))
@@ -79,13 +78,29 @@ Show a list of schedulers."
(define-meta-command ((spawn-sched fibers) repl)
"spawn-sched
Create a new scheduler for fibers, and run it on a new kernel thread."
- (call-with-new-thread (lambda ()
- (run-fibers sleep-forever))))
+ (let ((sched (make-scheduler)))
+ (call-with-new-thread (lambda ()
+ (call-with-new-thread
+ (lambda ()
+ (run-fibers #:scheduler sched)))))
+ (format #t "Spawned scheduler #~a.\n" (scheduler-name sched))))
(define-meta-command ((kill-sched fibers) repl sched)
"kill-sched SCHED
Shut down a scheduler."
- (display "Don't know how to do that yet!\n"))
+ (let ((sched (or (scheduler-by-name sched)
+ (error "no scheduler with name" sched))))
+ (cond
+ ((scheduler-kernel-thread sched)
+ => (lambda (thread)
+ (format #t "Killing thread running scheduler #~a...\n"
+ (scheduler-name sched))
+ (cancel-thread thread)
+ (join-thread thread)
+ (format #t "Thread running scheduler #~a stopped.\n"
+ (scheduler-name sched))))
+ (else
+ (format #t "Scheduler #~a not running.\n" (scheduler-name sched))))))
(define-meta-command ((fibers fibers) repl #:optional sched)
"fibers [SCHED]