improve protection against multiple instantiation
This commit is contained in:
parent
881c182956
commit
bcbe42f4ff
14
collects/mred/private/wx/common/once.rkt
Normal file
14
collects/mred/private/wx/common/once.rkt
Normal file
|
@ -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")))
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#lang racket/base
|
||||
(require ffi/unsafe
|
||||
ffi/unsafe/define)
|
||||
ffi/unsafe/define
|
||||
"once.rkt")
|
||||
|
||||
(provide define-mz)
|
||||
|
||||
|
|
|
@ -18,5 +18,7 @@
|
|||
(define-namespace-anchor anchor)
|
||||
|
||||
(define (gui-dynamic-require sym)
|
||||
(parameterize ([current-namespace (namespace-anchor->empty-namespace anchor)])
|
||||
(dynamic-require 'mred sym)))
|
||||
(if (gui-available?)
|
||||
(parameterize ([current-namespace (namespace-anchor->empty-namespace anchor)])
|
||||
(dynamic-require 'mred sym))
|
||||
(error "racket/gui/base is not available")))
|
||||
|
|
Loading…
Reference in New Issue
Block a user