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)])
(when mref
(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!)
(when (sel obj)
(Release (sel obj))
(st! obj #f)))
(bye! com-object-dispatch
set-com-object-dispatch!)
(bye! com-object-unknown
set-com-object-unknown!)
(bye! com-object-type-info
set-com-object-type-info!)
(bye! com-object-event-type-info
@ -639,10 +643,10 @@
set-com-object-connection-point!)
(bye! com-object-sink
set-com-object-sink!)
(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))))))
(bye! com-object-dispatch
set-com-object-dispatch!)
(bye! com-object-unknown
set-com-object-unknown!))))
(define (release-type-desc td)
;; call in atomic mode