ffi/unsafe/com: fix custodian and multi-instance problems

This commit is contained in:
Matthew Flatt 2012-04-02 14:35:21 -06:00
parent f5449f38e8
commit cb7200295e

View File

@ -590,7 +590,9 @@
(check-com-obj 'com-release obj) (check-com-obj 'com-release obj)
(call-as-atomic (call-as-atomic
(lambda () (lambda ()
(scheme_remove_managed (com-object-mref obj) obj) (let ([mref (com-object-mref obj)])
(when mref
(scheme_remove_managed mref obj)))
(define (bye! sel st!) (define (bye! sel st!)
(when (sel obj) (when (sel obj)
(Release (sel obj)) (Release (sel obj))
@ -1883,8 +1885,11 @@
;; ---------------------------------------- ;; ----------------------------------------
;; Initialize ;; Initialize
(define-ole CoInitialize (_hfun (_pointer = #f) (define-ole CoInitialize (_wfun (_pointer = #f) -> (r : _HRESULT)
-> CoInitialize (void))) -> (cond
[(= r 0) (void)] ; ok
[(= r 1) (void)] ; already initialized
[else (windows-error (format "~a: failed" 'CoInitialize) r)])))
(define inited? #f) (define inited? #f)
(define (init!) (define (init!)