don't invalidate the error ranges for online check syntax when there is no admin

I believe that this can go wrong in the case that you edit a buffer and switch tabs
before drracket fully finishes responding to the edited buffer (due to a queue-callback
that postpones some of the response to editing the buffer) for online expansion.
At least, this is how I guess that the error below happened:

send: target is not an object: #f for method: get-view

 === context ===
/Users/robby/git/exp/plt/collects/racket/private/class-internal.rkt:4602:0: obj-error
/Users/robby/git/exp/plt/collects/drracket/private/module-language.rkt:1485:6: get-box method in .../module-language.rkt:1151:4
/Users/robby/git/exp/plt/collects/drracket/private/module-language.rkt:1397:6: invalidate-online-error-ranges method in .../module-language.rkt:1151:4
/Users/robby/git/exp/plt/collects/drracket/private/module-language.rkt:1387:6: clear-old-error method in .../module-language.rkt:1151:4
/Users/robby/git/exp/plt/collects/drracket/private/module-language.rkt:1177:6: buffer-modified method in .../module-language.rkt:1151:4
/Users/robby/git/exp/plt/collects/mred/private/wx/common/timer.rkt:34:38
/Users/robby/git/exp/plt/collects/mred/private/wx/common/queue.rkt:432:6
/Users/robby/git/exp/plt/collects/mred/private/wx/common/queue.rkt:472:32
/Users/robby/git/exp/plt/collects/mred/private/wx/common/queue.rkt:618:3
This commit is contained in:
Robby Findler 2011-10-07 06:52:07 -05:00
parent b6a9330bf1
commit 57deb86f7b

View File

@ -1395,9 +1395,14 @@
(set-online-error-ranges '()))
(define/private (invalidate-online-error-ranges)
(for ([an-error-range (in-list online-error-ranges)])
(define-values (x y w h) (get-box an-error-range))
(invalidate-bitmap-cache x y 'display-end h)))
(when (get-admin)
;; invalidate-online-error-ranges can be called at strange times
;; because it is invoked via a queue-callback thunk; specifically
;; the tab may have changed in drracket, which means that there is
;; no admin and thus there is no reason to invalidate any drawing
(for ([an-error-range (in-list online-error-ranges)])
(define-values (x y w h) (get-box an-error-range))
(invalidate-bitmap-cache x y 'display-end h))))
(define byt (box 0.0))
(define byb (box 0.0))
@ -1482,6 +1487,7 @@
[else
(super on-event evt)]))
;; pre: get-admin does not return #f
(define/private (get-box an-error-range)
(define start-pos (error-range-start an-error-range))
(define end-pos (error-range-end an-error-range))