fix more break-progaration problems in scheme/sandbox (where recent changes were not quite right)
svn: r14219
This commit is contained in:
parent
769ad3e98a
commit
a61e7b67f9
|
@ -682,8 +682,8 @@
|
||||||
(evaluate-program
|
(evaluate-program
|
||||||
(if (procedure? program-maker) (program-maker) program-maker)
|
(if (procedure? program-maker) (program-maker) program-maker)
|
||||||
limit-thunk
|
limit-thunk
|
||||||
(and coverage? (lambda (es+get) (set! uncovered es+get)))))))
|
(and coverage? (lambda (es+get) (set! uncovered es+get))))))
|
||||||
(channel-put result-ch 'ok)
|
(channel-put result-ch 'ok))
|
||||||
(set! eval-handler (cadr (sandbox-eval-handlers))) ; interactions handler
|
(set! eval-handler (cadr (sandbox-eval-handlers))) ; interactions handler
|
||||||
;; finally wait for interaction expressions
|
;; finally wait for interaction expressions
|
||||||
(let ([n 0])
|
(let ([n 0])
|
||||||
|
@ -711,25 +711,22 @@
|
||||||
(call-with-values run list))))))
|
(call-with-values run list))))))
|
||||||
(loop)))))))
|
(loop)))))))
|
||||||
(define (get-user-result)
|
(define (get-user-result)
|
||||||
(let ([get-result (lambda () (sync user-done-evt result-ch))])
|
(if (and (sandbox-propagate-breaks)
|
||||||
(if (and (sandbox-propagate-breaks)
|
;; The following test is weird. We reliably catch breaks if breaks
|
||||||
;; The following test is weird. We reliably catch breaks if breaks
|
;; are enabled, except that a break just before or after isn't
|
||||||
;; are enabled, except that a break just before or after isn't
|
;; reliably propagated. A `get-result/enable-breaks' function
|
||||||
;; reliably propagated. A `get-result/enable-breaks' function
|
;; would make more sense.
|
||||||
;; would make more sense.
|
(break-enabled))
|
||||||
(break-enabled))
|
;; The following loop ensures that breaks are disabled while trying
|
||||||
;; The following loop ensures that breaks are disabled while trying
|
;; to handle a break, which ensures that we don't fail to
|
||||||
;; to handle a break, which ensures that we don't fail to
|
;; propagate a break.
|
||||||
;; propagate a break.
|
(parameterize-break
|
||||||
(parameterize-break
|
#f
|
||||||
#f
|
(let loop ()
|
||||||
(let loop ()
|
(with-handlers* ([exn:break? (lambda (e) (user-break) (loop))])
|
||||||
(with-handlers* ([exn:break? (lambda (e) (user-break) (loop))])
|
(sync/enable-break user-done-evt result-ch))))
|
||||||
(parameterize-break
|
;; The simple case doesn't have to deal with breaks:
|
||||||
#t
|
(sync user-done-evt result-ch)))
|
||||||
(get-result)))))
|
|
||||||
;; The same case doesn't have to deal with breaks:
|
|
||||||
(get-result))))
|
|
||||||
(define (user-eval expr)
|
(define (user-eval expr)
|
||||||
;; the thread will usually be running, but it might be killed outside of
|
;; the thread will usually be running, but it might be killed outside of
|
||||||
;; the sandboxed environment, for example, if you do something like
|
;; the sandboxed environment, for example, if you do something like
|
||||||
|
|
Loading…
Reference in New Issue
Block a user