From cb7200295ee45e360996a06c86c3b76fa9f8e65c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 2 Apr 2012 14:35:21 -0600 Subject: [PATCH] ffi/unsafe/com: fix custodian and multi-instance problems --- collects/ffi/unsafe/com.rkt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/collects/ffi/unsafe/com.rkt b/collects/ffi/unsafe/com.rkt index e5e06a0045..13578667ac 100644 --- a/collects/ffi/unsafe/com.rkt +++ b/collects/ffi/unsafe/com.rkt @@ -590,7 +590,9 @@ (check-com-obj 'com-release obj) (call-as-atomic (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!) (when (sel obj) (Release (sel obj)) @@ -1883,8 +1885,11 @@ ;; ---------------------------------------- ;; Initialize -(define-ole CoInitialize (_hfun (_pointer = #f) - -> CoInitialize (void))) +(define-ole CoInitialize (_wfun (_pointer = #f) -> (r : _HRESULT) + -> (cond + [(= r 0) (void)] ; ok + [(= r 1) (void)] ; already initialized + [else (windows-error (format "~a: failed" 'CoInitialize) r)]))) (define inited? #f) (define (init!)