diff --git a/pkgs/racket-test/tests/racket/stress/fs-change.rkt b/pkgs/racket-test/tests/racket/stress/fs-change.rkt new file mode 100644 index 0000000000..89b8460948 --- /dev/null +++ b/pkgs/racket-test/tests/racket/stress/fs-change.rkt @@ -0,0 +1,26 @@ +#lang racket/base +(require racket/place + racket/file) + +(define (go) + (place + pch + (define path (make-temporary-file)) + (call-with-output-file* path #:exists 'append void) + (for ([i (in-range 50)]) + (define c (make-custodian)) + (parameterize ([current-custodian c]) + (define fcs + (for/list ([j (in-range 100)]) + (define fc (filesystem-change-evt path)) + (sync/timeout 0 fc) + (if (even? j) + (call-with-output-file* path #:exists 'append (lambda (o) (write-byte 48 o))) + (filesystem-change-evt-cancel fc)) + fc)) + (map sync fcs)) + (custodian-shutdown-all c)) + (delete-file path))) + +(module+ main + (map place-wait (for/list ([i 4]) (go)))) diff --git a/racket/src/io/main.rkt b/racket/src/io/main.rkt index 7abac1dc37..62373c057e 100644 --- a/racket/src/io/main.rkt +++ b/racket/src/io/main.rkt @@ -28,6 +28,8 @@ rktio-place-init!) (submod "error/main.rkt" place-init) + (only-in "sandman/ltps.rkt" + shared-ltps-place-init!) "port/place.rkt") (provide (all-from-out "port/main.rkt") @@ -60,6 +62,7 @@ (sandman-place-init!) (rktio-place-init!) (logger-init!) + (shared-ltps-place-init!) (install-error-value->string-handler!) (init-current-directory!) (init-current-ports! in-fd out-fd err-fd cust plumber)) diff --git a/racket/src/io/sandman/ltps.rkt b/racket/src/io/sandman/ltps.rkt index 5c9a38704a..a9c4d818ce 100644 --- a/racket/src/io/sandman/ltps.rkt +++ b/racket/src/io/sandman/ltps.rkt @@ -31,7 +31,7 @@ (define-place-local shared-ltps (make-ltps)) (define (shared-ltps-place-init!) - (make-ltps)) + (set! shared-ltps (make-ltps))) ;; ---------------------------------------- diff --git a/racket/src/io/sandman/main.rkt b/racket/src/io/sandman/main.rkt index 50c9ee027e..256b75fc28 100644 --- a/racket/src/io/sandman/main.rkt +++ b/racket/src/io/sandman/main.rkt @@ -62,8 +62,7 @@ (define-place-local awoken-threads '()) (define (sandman-place-init!) - (set! lock (make-lock)) - (shared-ltps-place-init!)) + (set! lock (make-lock))) (void (current-sandman