From bf06162210dd1ef2e201c7fed0a5affc7fadae6b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 16 Aug 2020 06:29:18 -0600 Subject: [PATCH] cs: revert custodian change that creates a leak Reverts the repair attempt in 91abd020d1. The problem with switching to a "late" reference is that it's based on ordered finalization in Racket CS, which doesn't work on values that can refer back to themselves. --- racket/src/cs/schemified/io.scm | 36 +++++++++++++++-------------- racket/src/cs/schemified/thread.scm | 2 +- racket/src/thread/custodian.rkt | 2 +- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/racket/src/cs/schemified/io.scm b/racket/src/cs/schemified/io.scm index 1b0ac6ec72..c685f1e2d9 100644 --- a/racket/src/cs/schemified/io.scm +++ b/racket/src/cs/schemified/io.scm @@ -17750,23 +17750,25 @@ (unsafe-end-atomic))))) (define cache-save! (lambda (c_0 enc_0 get_0 update!_0) - (begin - (unsafe-start-atomic) - (begin0 - (begin - (if (equal? enc_0 (cache-enc (unsafe-place-local-ref cell.1$5))) - (void) - (begin - (cache-clear! cache-to set-cache-to!) - (cache-clear! cache-to2 set-cache-to2!) - (cache-clear! cache-from set-cache-from!) - (set-cache-enc! (unsafe-place-local-ref cell.1$5) enc_0))) - (if (|#%app| get_0 (unsafe-place-local-ref cell.1$5)) - (1/bytes-close-converter c_0) - (begin - (bytes-reset-converter c_0) - (|#%app| update!_0 (unsafe-place-local-ref cell.1$5) c_0)))) - (unsafe-end-atomic))))) + (if c_0 + (begin + (unsafe-start-atomic) + (begin0 + (begin + (if (equal? enc_0 (cache-enc (unsafe-place-local-ref cell.1$5))) + (void) + (begin + (cache-clear! cache-to set-cache-to!) + (cache-clear! cache-to2 set-cache-to2!) + (cache-clear! cache-from set-cache-from!) + (set-cache-enc! (unsafe-place-local-ref cell.1$5) enc_0))) + (if (|#%app| get_0 (unsafe-place-local-ref cell.1$5)) + (1/bytes-close-converter c_0) + (begin + (bytes-reset-converter c_0) + (|#%app| update!_0 (unsafe-place-local-ref cell.1$5) c_0)))) + (unsafe-end-atomic))) + (void)))) (define bytes-open-converter/cached-to (lambda (enc_0) (let ((or-part_0 (cache-lookup! enc_0 cache-to set-cache-to!))) diff --git a/racket/src/cs/schemified/thread.scm b/racket/src/cs/schemified/thread.scm index b69d6e7c37..0184d21319 100644 --- a/racket/src/cs/schemified/thread.scm +++ b/racket/src/cs/schemified/thread.scm @@ -5679,7 +5679,7 @@ #f (let ((we_0 (if (not weak?7_0) - (|#%app| host:make-late-will-executor void) + (|#%app| host:make-will-executor void) #f))) (begin (let ((app_0 (custodian-children cust12_0))) diff --git a/racket/src/thread/custodian.rkt b/racket/src/thread/custodian.rkt index 012a17e3e8..5dc1c4452c 100644 --- a/racket/src/thread/custodian.rkt +++ b/racket/src/thread/custodian.rkt @@ -122,7 +122,7 @@ [(custodian-shut-down? cust) #f] [else (define we (and (not weak?) - (host:make-late-will-executor void))) + (host:make-will-executor void))) (hash-set! (custodian-children cust) obj (cond