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:
parent
7cb2bfa0f8
commit
9313bfde31
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user