diff --git a/racket/collects/db/private/generic/prepared.rkt b/racket/collects/db/private/generic/prepared.rkt index 3dbc6142e8..af52bb8a5f 100644 --- a/racket/collects/db/private/generic/prepared.rkt +++ b/racket/collects/db/private/generic/prepared.rkt @@ -102,18 +102,21 @@ (define will-executor (make-will-executor)) (define finalizer-thread - (thread/suspend-to-kill - (lambda () - (let loop () - (with-handlers - ([(lambda (e) #t) - (lambda (e) - ((error-display-handler) - (cond [(exn? e) - (format "prepared statement finalizer thread handled exception:\n~a" - (exn-message e))] - [else - "prepared statement finalizer thread handled non-exception"]) - e))]) - (will-execute will-executor)) - (loop))))) + ;; Set parameters for the new thread to avoid references to the + ;; namespace, since prepared statements may be bound to globals, etc. + (parameterize ([current-namespace (make-empty-namespace)]) + (thread/suspend-to-kill + (lambda () + (let loop () + (with-handlers + ([(lambda (e) #t) + (lambda (e) + ((error-display-handler) + (cond [(exn? e) + (format "prepared statement finalizer thread handled exception:\n~a" + (exn-message e))] + [else + "prepared statement finalizer thread handled non-exception"]) + e))]) + (will-execute will-executor)) + (loop)))))) diff --git a/racket/collects/db/private/sqlite3/connection.rkt b/racket/collects/db/private/sqlite3/connection.rkt index fb27890a25..97ba750362 100644 --- a/racket/collects/db/private/sqlite3/connection.rkt +++ b/racket/collects/db/private/sqlite3/connection.rkt @@ -374,16 +374,16 @@ (handle-status* who full-s -db db-spec pst)) ;; ---- - (super-new) - (register-finalizer-and-custodian-shutdown 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))))) + (register-finalizer-and-custodian-shutdown + this + ;; 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%]) + (lambda (obj) + (send obj disconnect) + ;; Dummy result to prevent reference from being optimized away + dont-gc))))) ;; ----------------------------------------