diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 1346172437..9d96be2a8c 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "7.5.0.1") +(define version "7.5.0.2") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-test/tests/racket/locale-cache.rkt b/pkgs/racket-test/tests/racket/locale-cache.rkt new file mode 100644 index 0000000000..c14947be8b --- /dev/null +++ b/pkgs/racket-test/tests/racket/locale-cache.rkt @@ -0,0 +1,12 @@ +#lang racket/base + +;; Probably locale-sensitive string comparisons are not justed just by +;; starting up, so the first `string-localebytes who to-str) (encoding->bytes who from-str))) @@ -82,11 +83,14 @@ #f] [else (define converter (bytes-converter c #f)) - (define cref (unsafe-custodian-register (current-custodian) converter close-converter #f #f)) + (define cref (unsafe-custodian-register (or cust (current-custodian)) converter close-converter #f #f)) (set-bytes-converter-custodian-reference! converter cref) (end-atomic) converter])])])) +(define/who (bytes-open-converter from-str to-str) + (bytes-open-converter-in-custodian who #f from-str to-str)) + ;; ---------------------------------------- ;; in atomic mode @@ -235,6 +239,6 @@ ;; in atomic mode (define (bytes-reset-converter converter) - (define c (bytes-converter-c converter)) + (define c (bytes-converter-c converter)) (unless (utf-8-converter? c) (rktio_convert_reset rktio c))) diff --git a/racket/src/io/host/bootstrap.rkt b/racket/src/io/host/bootstrap.rkt index 56824d8415..b5ee5c66eb 100644 --- a/racket/src/io/host/bootstrap.rkt +++ b/racket/src/io/host/bootstrap.rkt @@ -2,7 +2,8 @@ (require (only-in '#%linklet primitive-table) (only-in '#%unsafe unsafe-custodian-register - unsafe-custodian-unregister) + unsafe-custodian-unregister + unsafe-make-custodian-at-root) "../../thread/current-sandman.rkt" ffi/unsafe/atomic (only-in ffi/unsafe @@ -149,6 +150,7 @@ 'plumber-flush-handle-remove! plumber-flush-handle-remove! 'unsafe-custodian-register unsafe-custodian-register 'unsafe-custodian-unregister unsafe-custodian-unregister + 'unsafe-make-custodian-at-root unsafe-make-custodian-at-root 'thread-push-kill-callback! thread-push-kill-callback! 'thread-pop-kill-callback! thread-pop-kill-callback! 'unsafe-add-pre-poll-callback! (lambda (proc) (void)) diff --git a/racket/src/io/host/thread.rkt b/racket/src/io/host/thread.rkt index 823ad48edc..8bf4605689 100644 --- a/racket/src/io/host/thread.rkt +++ b/racket/src/io/host/thread.rkt @@ -77,6 +77,7 @@ in-atomic-mode? unsafe-custodian-register unsafe-custodian-unregister + unsafe-make-custodian-at-root thread-push-kill-callback! thread-pop-kill-callback! unsafe-add-pre-poll-callback! diff --git a/racket/src/io/locale/cache.rkt b/racket/src/io/locale/cache.rkt index e2c44f8584..9c458924e2 100644 --- a/racket/src/io/locale/cache.rkt +++ b/racket/src/io/locale/cache.rkt @@ -21,9 +21,11 @@ (define (new-cache) (cache #f #f #f #f)) (define-place-local local-cache (new-cache)) +(define-place-local converter-custodian (unsafe-make-custodian-at-root)) (define (convert-cache-init!) - (set! local-cache (new-cache))) + (set! local-cache (new-cache)) + (set! converter-custodian (unsafe-make-custodian-at-root))) (define (cache-clear! get update!) (define c (get local-cache)) @@ -57,24 +59,21 @@ (define (bytes-open-converter/cached-to enc) (or (cache-lookup! enc cache-to set-cache-to!) - (bytes-open-converter ucs-4-encoding enc))) + (bytes-open-converter-in-custodian 'bytes-open-converter/cached-to converter-custodian ucs-4-encoding enc))) (define (bytes-open-converter/cached-to2 enc) (or (cache-lookup! enc cache-to2 set-cache-to2!) - (bytes-open-converter ucs-4-encoding enc))) + (bytes-open-converter-in-custodian 'bytes-open-converter/cached-to2 converter-custodian ucs-4-encoding enc))) (define (bytes-open-converter/cached-from enc) (or (cache-lookup! enc cache-from set-cache-from!) - (bytes-open-converter enc "UTF-8"))) + (bytes-open-converter-in-custodian 'bytes-open-converter/cached-from converter-custodian enc "UTF-8"))) (define (bytes-close-converter/cached-to c enc) - (or (cache-save! c enc cache-to set-cache-to!) - (bytes-close-converter c))) + (cache-save! c enc cache-to set-cache-to!)) (define (bytes-close-converter/cached-to2 c enc) - (or (cache-save! c enc cache-to2 set-cache-to2!) - (bytes-close-converter c))) + (cache-save! c enc cache-to2 set-cache-to2!)) (define (bytes-close-converter/cached-from c enc) - (or (cache-save! c enc cache-from set-cache-from!) - (bytes-close-converter c))) + (cache-save! c enc cache-from set-cache-from!)) diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 46b448dc1f..8eb5374cf9 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -16,7 +16,7 @@ #define MZSCHEME_VERSION_X 7 #define MZSCHEME_VERSION_Y 5 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 1 +#define MZSCHEME_VERSION_W 2 /* A level of indirection makes `#` work as needed: */ #define AS_a_STR_HELPER(x) #x diff --git a/racket/src/thread/instance.rkt b/racket/src/thread/instance.rkt index be1afe3a47..aa3e4466bc 100644 --- a/racket/src/thread/instance.rkt +++ b/racket/src/thread/instance.rkt @@ -65,6 +65,7 @@ 'plumber-flush-handle-remove! plumber-flush-handle-remove! 'unsafe-custodian-register unsafe-custodian-register 'unsafe-custodian-unregister unsafe-custodian-unregister + 'unsafe-make-custodian-at-root unsafe-make-custodian-at-root 'thread-push-kill-callback! thread-push-kill-callback! 'thread-pop-kill-callback! thread-pop-kill-callback! 'unsafe-add-pre-poll-callback! unsafe-add-pre-poll-callback!