added a hack to keep DrRacket from freezing when it is unable to

detect if a (n online check syntax) rename would conflict with
an existing name. (This can happen because the remote place's
custodian gets shutdown due to, for example, another tab's online
check syntax running.)
This commit is contained in:
Robby Findler 2012-01-30 07:52:52 -06:00
parent a0ef78e97b
commit e8902f9981

View File

@ -1630,7 +1630,21 @@ If the namespace does not, they are colored the unbound color.
[`(syncheck:add-docs-menu ,text ,start-pos ,end-pos ,key ,the-label ,path ,tag)
(send defs-text syncheck:add-docs-menu defs-text start-pos end-pos key the-label path tag)]
[`(syncheck:add-rename-menu ,id-as-sym ,to-be-renamed/poss ,name-dup-pc ,name-dup-id)
(define (name-dup? name) (place-channel-put/get name-dup-pc (list name-dup-id name)))
(define other-side-dead? #f)
(define (name-dup? name)
(cond
[other-side-dead?
;; just give up here ...
#f]
[else
(place-channel-put name-dup-pc (list name-dup-id name))
(define res (sync/timeout .5 (handle-evt name-dup-pc list)))
(cond
[(list? res) (car res)]
[else
(printf "other side died\n")
(set! other-side-dead? #t)
#f])]))
(define to-be-renamed/poss/fixed
(for/list ([lst (in-list to-be-renamed/poss)])
(list defs-text (list-ref lst 1) (list-ref lst 2))))