diff --git a/collects/mred/private/wx/common/once.rkt b/collects/mred/private/wx/common/once.rkt new file mode 100644 index 00000000..c0e49a64 --- /dev/null +++ b/collects/mred/private/wx/common/once.rkt @@ -0,0 +1,14 @@ +#lang racket/base +(require ffi/unsafe) + +(provide scheme_register_process_global) + +;; This module must be instantiated only once: + +(define scheme_register_process_global + (get-ffi-obj 'scheme_register_process_global #f (_fun _string _pointer -> _pointer))) + +(let ([v (scheme_register_process_global "GRacket-support-initialized" + (cast 1 _scheme _pointer))]) + (when v + (error "cannot instantiate `racket/gui/base' a second time in the same process"))) diff --git a/collects/mred/private/wx/common/queue.rkt b/collects/mred/private/wx/common/queue.rkt index 5f717ea3..042a9281 100644 --- a/collects/mred/private/wx/common/queue.rkt +++ b/collects/mred/private/wx/common/queue.rkt @@ -5,7 +5,8 @@ racket/class "rbtree.rkt" "../../lock.rkt" - "handlers.rkt") + "handlers.rkt" + "once.rkt") (provide queue-evt set-check-queue! @@ -54,15 +55,6 @@ scheme_register_process_global) -;; ------------------------------------------------------------ -;; This module must be instantiated only once: - -(define-mz scheme_register_process_global (_fun _string _pointer -> _pointer)) -(let ([v (scheme_register_process_global "GRacket-support-initialized" - (cast 1 _scheme _pointer))]) - (when v - (error "cannot start GRacket a second time in the same process"))) - ;; ------------------------------------------------------------ ;; Create a Scheme evt that is ready when a queue is nonempty diff --git a/collects/mred/private/wx/common/utils.rkt b/collects/mred/private/wx/common/utils.rkt index 5e7e4f02..1d9948dc 100644 --- a/collects/mred/private/wx/common/utils.rkt +++ b/collects/mred/private/wx/common/utils.rkt @@ -1,6 +1,7 @@ #lang racket/base (require ffi/unsafe - ffi/unsafe/define) + ffi/unsafe/define + "once.rkt") (provide define-mz)