Open AlexKnauth opened 7 years ago
I don't suppose I'd be so lucky as to get you to tell me how to make this happen reliably?
I can't make it happen reliably. However, it might be important to know that this happened while I was working on a #lang
language that adds a button to DrRacket, and that when you press the button, it adds text to the editor.
What methods (if any) does your tool override?
It doesn't override any methods, it just calls methods on the frame, editor, and definitions-text, and it also uses drracket:eval:expand-program
to expand the program.
The methods it calls on the frame are:
open-status-line
, update-status-line
, close-status-line
ensure-defs-shown
, ensure-rep-hidden
get-editor
, get-definitions-text
The methods it calls on the editor are:
begin-edit-sequence
, end-edit-sequence
set-position
, insert-port
Could my call to the insert-port
method trigger the after-insert
method, which calls trigger-buffer-changed-callback
which sets update-the-strs-coroutine
to false?
I don't see how those could cause problems. I'm stuck for now. (Yes, that could happen, but perhaps not between when it is set! to a non-#f value and when it is looked at ...)
It may be helpful to put printfs into your DrRacket to track which of the (set! update-the-strs-coroutine #f)
s is the one triggering it and get the stack at that point via this trick:
(printf "stack....\n")
(for ([x (in-list (continuation-mark-set->context (current-continuation-marks)))])
(printf " ~s\n" x))
(printf "-----\n")
With that code after the set!
in trigger-buffer-changed-callback
(Line 432), I found several places where my code's method calls call it. Every time this mentions step-4-editor-insert-templates
that's my button calling either set-position
or insert-port
.
Now the question is whether this can happen concurrently with the update-the-strs
method.
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-delete method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 245 6 10565 119))
(|after-delete method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1398 6 62045 105))
(|after-delete method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 352 10 15930 146))
(|after-delete method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4633 4 182936 236))
(core1189 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1866 2 91920 12507))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-insert method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 242 6 10439 119))
(|after-insert method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1394 6 61926 105))
(|after-insert method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 360 10 16234 146))
(|after-insert method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4626 4 182694 236))
(|after-insert method in .../inline-overview.rkt:29:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/inline-overview.rkt> 84 4 2721 1885))
(|after-insert method in ...ork/private/text.rkt:4837:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4847 4 191799 608))
(|after-insert method in ...ork/private/text.rkt:527:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 580 4 24552 237))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-delete method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 245 6 10565 119))
(|after-delete method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1398 6 62045 105))
(|after-delete method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 352 10 15930 146))
(|after-delete method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4633 4 182936 236))
(core1189 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1866 2 91920 12507))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-insert method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 242 6 10439 119))
(|after-insert method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1394 6 61926 105))
(|after-insert method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 360 10 16234 146))
(|after-insert method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4626 4 182694 236))
(|after-insert method in .../inline-overview.rkt:29:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/inline-overview.rkt> 84 4 2721 1885))
(|after-insert method in ...ork/private/text.rkt:4837:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4847 4 191799 608))
(|after-insert method in ...ork/private/text.rkt:527:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 580 4 24552 237))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-delete method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 245 6 10565 119))
(|after-delete method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1398 6 62045 105))
(|after-delete method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 352 10 15930 146))
(|after-delete method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4633 4 182936 236))
(core1189 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1866 2 91920 12507))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-insert method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 242 6 10439 119))
(|after-insert method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1394 6 61926 105))
(|after-insert method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 360 10 16234 146))
(|after-insert method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4626 4 182694 236))
(|after-insert method in .../inline-overview.rkt:29:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/inline-overview.rkt> 84 4 2721 1885))
(|after-insert method in ...ork/private/text.rkt:4837:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4847 4 191799 608))
(|after-insert method in ...ork/private/text.rkt:527:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 580 4 24552 237))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-delete method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 245 6 10565 119))
(|after-delete method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1398 6 62045 105))
(|after-delete method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 352 10 15930 146))
(|after-delete method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4633 4 182936 236))
(core1189 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1866 2 91920 12507))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-insert method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 242 6 10439 119))
(|after-insert method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1394 6 61926 105))
(|after-insert method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 360 10 16234 146))
(|after-insert method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4626 4 182694 236))
(|after-insert method in .../inline-overview.rkt:29:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/inline-overview.rkt> 84 4 2721 1885))
(|after-insert method in ...ork/private/text.rkt:4837:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4847 4 191799 608))
(|after-insert method in ...ork/private/text.rkt:527:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 580 4 24552 237))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-delete method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 245 6 10565 119))
(|after-delete method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1398 6 62045 105))
(|after-delete method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 352 10 15930 146))
(|after-delete method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4633 4 182936 236))
(core1189 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1866 2 91920 12507))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
stack....
(|trigger-buffer-changed-callback method in ...ck/blueboxes-gui.rkt:176:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/blueboxes-gui.rkt> 428 4 16356 392))
(|after-insert method in ...e-language-tools.rkt:206:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/module-language-tools.rkt> 242 6 10439 119))
(|after-insert method in ...et/private/debug.rkt:1347:4| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/debug.rkt> 1394 6 61926 105))
(|after-insert method in ...ate/syncheck/gui.rkt:347:8| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/drracket/drracket/private/syncheck/gui.rkt> 360 10 16234 146))
(|after-insert method in ...ork/private/text.rkt:4432:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4626 4 182694 236))
(|after-insert method in .../inline-overview.rkt:29:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/inline-overview.rkt> 84 4 2721 1885))
(|after-insert method in ...ork/private/text.rkt:4837:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 4847 4 191799 608))
(|after-insert method in ...ork/private/text.rkt:527:2| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/framework/private/text.rkt> 580 4 24552 237))
(|do-insert method in text%| . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 1290 2 59028 4601))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2743 17 129303 745))
(core3633 . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wxme/text.rkt> 2701 2 127177 449))
(for-loop . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 80 2 2759 724))
(step-4-editor-insert-templates . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 78 0 2663 864))
(#f . #(struct:srcloc #<path:/Users/Alex/Desktop/racketcon2017/step-4/lang/step-4-button.rkt> 43 3 1152 1404))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 428 6 18859 1056))
(#f . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 479 32 20846 120))
(call-with-break-parameterization . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/collects/racket/private/more-scheme.rkt> 148 2 4881 517))
(loop . #(struct:srcloc #<path:/Applications/Racket/2017-10-29/Racket v6.11.0.2/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 374 18 16779 540))
-----
The way GUIs work, it should never happen concurrently. You should be able to tell this by checking to see if (eq? (current-thread) (eventspace-handler-thread (current-eventspace)))
is true or not. Well, I suppose your tool could be making new eventspaces and calling methods from their handler threads. Is it doing that?
If I save the old thread (the one my button callback is called in) and compare it to the current-thread when I'm inserting, those threads are different. This is probably because drracket:eval:expand-program
is creating a new eventspace, and its calling its function arguments within that eventspace.
Does that mean it can be concurrent with the blueboxes update-the-strs
method?
I noticed DrRacket's check-syntax doesn't use the eventspace that drracket:eval:expand-program
gives it, but puts it in the old eventspace, which it saved from before it started expanding. When you were talking about "The way GUIs work" were you talking about Check Syntax switching back to the old saved eventspace?
My button does not do that, it stays in the eventspace that drracket:eval:expand-program
gave it. Does this provide the unexpected concurrency that broke it?
Yes, it can be concurrent and this is rightly considered a bug in your tool. You may not call any GUI methods from any thread except the eventspace main thread.
re: "ways GUIs work", yes, that's the kind of thing I had in mind. more generally, I was just saying you need to design your concurrent program to work properly and one of the requirements there is that you don't do GUI things on a non-GUI thread (unless you specially design a thread-safe interface you call, of course, but that's your job, not the GUI's job).
Do keep in mind that just saving the eventspace and queue'ing a callback onto it may or may not be the right thing. There really is concurrency here, so some holistic planning is required.
Should the documentation for drracket:eval:expand-program
be updated with an example of saving the old eventspace, switching to it, and using queue-callback
, whenever you want to call GUI methods?
Maybe someone shoudl write something about how to program GUIs and write multi-threaded programs and that could be linked to from there.
@rfinder I still think this would be a cool research area for types/contracts that inform Alex (and me, who has had similar bugs) of the concurrency violation.
Alternatively, I would love to explore whether running all of this in Syndicate would eliminate these bugs.
On Oct 31, 2017, at 4:54 PM, Robby Findler notifications@github.com wrote:
Maybe someone shoudl write something about how to program GUIs and write multi-threaded programs and that could be linked to from there. — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.
I completely agree that there should be something type/contract-like that would let people know the invariants here.
I think that syndicate would help. I'm not sure how it plugs in. I'll note that CML already does help in a huge way here (and it gets used a whole lot) but no one reached for it (probably because they didn't get a contract violation!). Would syndicate suffer from the same problem (namely that people would't know to reach for it and how to plug it in)?
This would be a worthwhile experiment.
On Nov 1, 2017, at 11:20 AM, Robby Findler notifications@github.com wrote:
I completely agree that there should be something type/contract-like that would let people know the invariants here.
I think that syndicate would help. I'm not sure how it plugs in. I'll note that CML already does help in a huge way here (and it gets used a whole lot) but no one reached for it (probably because they didn't get a contract violation!). Would syndicate suffer from the same problem (namely that people would't know to reach for it and how to plug it in)?
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.
The error looks like it's coming from line 459 of drracket/private/syncheck/blueboxes-gui.rkt:
In the
update-the-strs
method. I don't know how this is possible since lines 447-449 should have set theupdate-the-strs-coroutine
variable to be a valid (non-false) coroutine.Unless somehow something else is mutating it in between?
Here's the internal error: