db: fix finalization bug

(cherry picked from commit 8226899df3)
This commit is contained in:
Ryan Culpepper 2012-10-22 13:18:52 -04:00
parent ee0da81dc0
commit 20a9dcbdbd
2 changed files with 16 additions and 2 deletions

View File

@ -656,7 +656,14 @@
#:on-notice add-notice!)))
(super-new)
(register-finalizer this (lambda (obj) (send obj disconnect)))))
(register-finalizer this
(lambda (obj)
;; Keep a reference to the class to keep all FFI callout objects
;; (eg, SQLDisconnect) used by its methods from being finalized.
(let ([dont-gc this%])
(send obj disconnect)
;; Dummy result to prevent reference from being optimized away
dont-gc)))))
;; ----------------------------------------

View File

@ -316,7 +316,14 @@
;; ----
(super-new)
(register-finalizer this (lambda (obj) (send obj disconnect)))))
(register-finalizer this
(lambda (obj)
;; Keep a reference to the class to keep all FFI callout objects
;; (eg, sqlite3_close) used by its methods from being finalized.
(let ([dont-gc this%])
(send obj disconnect)
;; Dummy result to prevent reference from being optimized away
dont-gc)))))
;; ----------------------------------------