ffi/com: adjust order in object release

Release type descriptors before type infos, and release type
infos before objects. (This reordering shouldn't matter if
referencing counting does its usual job, but maybe it's better
to use the obvious order.)

Merge to v5.3
(cherry picked from commit 286efface0)
This commit is contained in:
Matthew Flatt 2012-08-02 07:52:27 -06:00 committed by Ryan Culpepper
parent 7cb2bfa0f8
commit 9313bfde31

View File

@ -623,14 +623,18 @@
(let ([mref (com-object-mref obj)]) (let ([mref (com-object-mref obj)])
(when mref (when mref
(scheme_remove_managed mref obj))) (scheme_remove_managed mref obj)))
;; Although reference counting should let us release in any
;; order, comments in the MysterX source suggest that the
;; order matters, so release type descriptions first and
;; the main object last.
(when (positive? (hash-count (com-object-types obj)))
(for ([td (in-hash-values (com-object-types obj))])
(release-type-desc td))
(set-com-object-types! obj (make-hash)))
(define (bye! sel st!) (define (bye! sel st!)
(when (sel obj) (when (sel obj)
(Release (sel obj)) (Release (sel obj))
(st! obj #f))) (st! obj #f)))
(bye! com-object-dispatch
set-com-object-dispatch!)
(bye! com-object-unknown
set-com-object-unknown!)
(bye! com-object-type-info (bye! com-object-type-info
set-com-object-type-info!) set-com-object-type-info!)
(bye! com-object-event-type-info (bye! com-object-event-type-info
@ -639,10 +643,10 @@
set-com-object-connection-point!) set-com-object-connection-point!)
(bye! com-object-sink (bye! com-object-sink
set-com-object-sink!) set-com-object-sink!)
(when (positive? (hash-count (com-object-types obj))) (bye! com-object-dispatch
(for ([td (in-hash-values (com-object-types obj))]) set-com-object-dispatch!)
(release-type-desc td)) (bye! com-object-unknown
(set-com-object-types! obj (make-hash)))))) set-com-object-unknown!))))
(define (release-type-desc td) (define (release-type-desc td)
;; call in atomic mode ;; call in atomic mode