diff --git a/racket/src/io/locale/cache.rkt b/racket/src/io/locale/cache.rkt index 9c458924e2..905cec43f9 100644 --- a/racket/src/io/locale/cache.rkt +++ b/racket/src/io/locale/cache.rkt @@ -42,18 +42,19 @@ c)))) (define (cache-save! c enc get update!) - (atomically - (unless (equal? enc (cache-enc local-cache)) - (cache-clear! cache-to set-cache-to!) - (cache-clear! cache-to2 set-cache-to2!) - (cache-clear! cache-from set-cache-from!) - (set-cache-enc! local-cache enc)) - (cond - [(get local-cache) - (bytes-close-converter c)] - [else - (bytes-reset-converter c) ; must be in atomic mode - (update! local-cache c)]))) + (when c + (atomically + (unless (equal? enc (cache-enc local-cache)) + (cache-clear! cache-to set-cache-to!) + (cache-clear! cache-to2 set-cache-to2!) + (cache-clear! cache-from set-cache-from!) + (set-cache-enc! local-cache enc)) + (cond + [(get local-cache) + (bytes-close-converter c)] + [else + (bytes-reset-converter c) ; must be in atomic mode + (update! local-cache c)])))) ;; ----------------------------------------