cs & io: fix subprocess handling with places

A table of subprocess handles to finalize was not place-local as it
should have been. The same was true of a table of resolved IP
addresses to finalize.

Related to  #3456
This commit is contained in:
Matthew Flatt 2020-10-23 11:22:46 -06:00
parent fb87a5032c
commit 5f8ad6039d
6 changed files with 94 additions and 64 deletions

View File

@ -93,6 +93,13 @@ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; {
} }
} }
tgc->during_alloc = 0;
tgc->pending_ephemerons = (ptr)0;
for (i = 0; i < (int)DIRTY_SEGMENT_LISTS; i++)
tgc->dirty_segments[i] = NULL;
tgc->queued_fire = 0;
tgc->preserve_ownership = 0;
v = S_vector_in(tc, space_new, 0, n); v = S_vector_in(tc, space_new, 0, n);
for (i = 0; i < n; i += 1) for (i = 0; i < n; i += 1)
@ -105,7 +112,9 @@ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; {
GCDATA(tc) = TO_PTR(tgc); GCDATA(tc) = TO_PTR(tgc);
tgc->tc = tc; tgc->tc = tc;
/* override nonclonable tc fields */ tgc->sweeper = main_sweeper_index;
/* override nonclonable tc fields */
THREADNO(tc) = S_G.threadno; THREADNO(tc) = S_G.threadno;
S_G.threadno = S_add(S_G.threadno, FIX(1)); S_G.threadno = S_add(S_G.threadno, FIX(1));
@ -162,13 +171,6 @@ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; {
LZ4OUTBUFFER(tc) = 0; LZ4OUTBUFFER(tc) = 0;
tgc->during_alloc = 0;
tgc->sweeper = main_sweeper_index;
tgc->pending_ephemerons = (ptr)0;
for (i = 0; i < (int)DIRTY_SEGMENT_LISTS; i++)
tgc->dirty_segments[i] = NULL;
tgc->preserve_ownership = 0;
tc_mutex_release(); tc_mutex_release();
return thread; return thread;

View File

@ -3482,20 +3482,20 @@
#f #f
#f)) #f))
(if (vector? ltps_0) rktio_NULL ltps_0)))))) (if (vector? ltps_0) rktio_NULL ltps_0))))))
(define cell.1$3 (unsafe-make-place-local (make-ltps))) (define cell.1$5 (unsafe-make-place-local (make-ltps)))
(define shared-ltps-place-init! (define shared-ltps-place-init!
(lambda () (unsafe-place-local-set! cell.1$3 (make-ltps)))) (lambda () (unsafe-place-local-set! cell.1$5 (make-ltps))))
(define shared-ltps-reset! (define shared-ltps-reset!
(lambda () (unsafe-place-local-set! cell.1$3 rktio_NULL))) (lambda () (unsafe-place-local-set! cell.1$5 rktio_NULL)))
(define fd-semaphore-update! (define fd-semaphore-update!
(lambda (fd_0 mode_0) (lambda (fd_0 mode_0)
(if (eq? (unsafe-place-local-ref cell.1$3) rktio_NULL) (if (eq? (unsafe-place-local-ref cell.1$5) rktio_NULL)
#f #f
(let ((h_0 (let ((h_0
(|#%app| (|#%app|
rktio_ltps_add rktio_ltps_add
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
(unsafe-place-local-ref cell.1$3) (unsafe-place-local-ref cell.1$5)
fd_0 fd_0
(if (eq? mode_0 'read) (if (eq? mode_0 'read)
1 1
@ -3524,13 +3524,13 @@
s_0)))))))))) s_0))))))))))
(define fd-semaphore-poll-ready? (define fd-semaphore-poll-ready?
(lambda () (lambda ()
(if (eq? (unsafe-place-local-ref cell.1$3) rktio_NULL) (if (eq? (unsafe-place-local-ref cell.1$5) rktio_NULL)
#f #f
(begin (begin
(|#%app| (|#%app|
rktio_ltps_poll rktio_ltps_poll
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
(unsafe-place-local-ref cell.1$3)) (unsafe-place-local-ref cell.1$5))
(letrec* (letrec*
((loop_0 ((loop_0
(|#%name| (|#%name|
@ -3541,7 +3541,7 @@
(|#%app| (|#%app|
rktio_ltps_get_signaled_handle rktio_ltps_get_signaled_handle
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
(unsafe-place-local-ref cell.1$3)))) (unsafe-place-local-ref cell.1$5))))
(if (vector? h_0) (if (vector? h_0)
did?_0 did?_0
(let ((ib_0 (let ((ib_0
@ -3657,12 +3657,12 @@
(void))))) (void)))))
(define sandman-poll-ctx-poll? (define sandman-poll-ctx-poll?
(lambda (poll-ctx_0) (|#%app| poll-ctx-poll? poll-ctx_0))) (lambda (poll-ctx_0) (|#%app| poll-ctx-poll? poll-ctx_0)))
(define cell.1$8 (unsafe-make-place-local #f)) (define cell.1$10 (unsafe-make-place-local #f))
(define cell.2$3 (unsafe-make-place-local #f)) (define cell.2$3 (unsafe-make-place-local #f))
(define sandman-set-background-sleep! (define sandman-set-background-sleep!
(lambda (sleep_0 fd_0) (lambda (sleep_0 fd_0)
(begin (begin
(unsafe-place-local-set! cell.1$8 sleep_0) (unsafe-place-local-set! cell.1$10 sleep_0)
(unsafe-place-local-set! cell.2$3 fd_0)))) (unsafe-place-local-set! cell.2$3 fd_0))))
(define effect_2049 (define effect_2049
(begin (begin
@ -3701,16 +3701,16 @@
(begin (begin
(if (if sleep-secs_0 (<= sleep-secs_0 0.0) #f) (if (if sleep-secs_0 (<= sleep-secs_0 0.0) #f)
(void) (void)
(if (unsafe-place-local-ref cell.1$8) (if (unsafe-place-local-ref cell.1$10)
(begin (begin
(|#%app| (|#%app|
rktio_start_sleep rktio_start_sleep
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
(if sleep-secs_0 sleep-secs_0 0.0) (if sleep-secs_0 sleep-secs_0 0.0)
ps_0 ps_0
(unsafe-place-local-ref cell.1$3) (unsafe-place-local-ref cell.1$5)
(unsafe-place-local-ref cell.2$3)) (unsafe-place-local-ref cell.2$3))
(|#%app| (unsafe-place-local-ref cell.1$8)) (|#%app| (unsafe-place-local-ref cell.1$10))
(|#%app| (|#%app|
rktio_end_sleep rktio_end_sleep
(unsafe-place-local-ref cell.1))) (unsafe-place-local-ref cell.1)))
@ -3719,7 +3719,7 @@
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
(if sleep-secs_0 sleep-secs_0 0.0) (if sleep-secs_0 sleep-secs_0 0.0)
ps_0 ps_0
(unsafe-place-local-ref cell.1$3)))) (unsafe-place-local-ref cell.1$5))))
(|#%app| (|#%app|
rktio_poll_set_forget rktio_poll_set_forget
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
@ -11824,12 +11824,12 @@
unsafe-undefined unsafe-undefined
temp6_0 temp6_0
'stderr)))) 'stderr))))
(define cell.1$7 (unsafe-make-place-local (make-stdin))) (define cell.1$9 (unsafe-make-place-local (make-stdin)))
(define cell.2$2 (unsafe-make-place-local (make-stdout))) (define cell.2$2 (unsafe-make-place-local (make-stdout)))
(define cell.3 (unsafe-make-place-local (make-stderr))) (define cell.3 (unsafe-make-place-local (make-stderr)))
(define 1/current-input-port (define 1/current-input-port
(make-parameter (make-parameter
(unsafe-place-local-ref cell.1$7) (unsafe-place-local-ref cell.1$9)
(lambda (v_0) (lambda (v_0)
(begin (begin
(if (1/input-port? v_0) (if (1/input-port? v_0)
@ -11861,10 +11861,10 @@
(lambda (in-fd_0 out-fd_0 err-fd_0 cust_0 plumber_0) (lambda (in-fd_0 out-fd_0 err-fd_0 cust_0 plumber_0)
(begin (begin
(unsafe-place-local-set! (unsafe-place-local-set!
cell.1$7 cell.1$9
(let ((temp10_0 "stdin")) (let ((temp10_0 "stdin"))
(open-input-fd.1 cust_0 unsafe-undefined in-fd_0 temp10_0))) (open-input-fd.1 cust_0 unsafe-undefined in-fd_0 temp10_0)))
(1/current-input-port (unsafe-place-local-ref cell.1$7)) (1/current-input-port (unsafe-place-local-ref cell.1$9))
(unsafe-place-local-set! (unsafe-place-local-set!
cell.2$2 cell.2$2
(let ((temp13_0 "stdout")) (let ((temp13_0 "stdout"))
@ -12698,7 +12698,7 @@
((p1_0) (flush-output_0 p1_0)))))) ((p1_0) (flush-output_0 p1_0))))))
(define maybe-flush-stdout (define maybe-flush-stdout
(lambda (in_0) (lambda (in_0)
(if (eq? in_0 (unsafe-place-local-ref cell.1$7)) (if (eq? in_0 (unsafe-place-local-ref cell.1$9))
(begin (begin
(1/flush-output (unsafe-place-local-ref cell.2$2)) (1/flush-output (unsafe-place-local-ref cell.2$2))
(1/flush-output (unsafe-place-local-ref cell.3))) (1/flush-output (unsafe-place-local-ref cell.3)))
@ -15619,21 +15619,21 @@
(raise-argument-error 'current-locale "(or/c #f string?)" v_0)) (raise-argument-error 'current-locale "(or/c #f string?)" v_0))
(if v_0 (string->immutable-string v_0) #f))) (if v_0 (string->immutable-string v_0) #f)))
'current-locale)) 'current-locale))
(define cell.1$6 (unsafe-make-place-local #f)) (define cell.1$8 (unsafe-make-place-local #f))
(define sync-locale! (define sync-locale!
(lambda () (lambda ()
(let ((loc_0 (1/current-locale))) (let ((loc_0 (1/current-locale)))
(if (let ((or-part_0 (not loc_0))) (if (let ((or-part_0 (not loc_0)))
(if or-part_0 (if or-part_0
or-part_0 or-part_0
(equal? (unsafe-place-local-ref cell.1$6) loc_0))) (equal? (unsafe-place-local-ref cell.1$8) loc_0)))
(void) (void)
(begin (begin
(unsafe-place-local-set! cell.1$6 (1/current-locale)) (unsafe-place-local-set! cell.1$8 (1/current-locale))
(|#%app| (|#%app|
rktio_set_locale rktio_set_locale
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
(1/string->bytes/utf-8 (unsafe-place-local-ref cell.1$6)))))))) (1/string->bytes/utf-8 (unsafe-place-local-ref cell.1$8))))))))
(define effect_2454 (begin (void (sync-locale!)) (void))) (define effect_2454 (begin (void (sync-locale!)) (void)))
(define locale-encoding-is-utf-8? (define locale-encoding-is-utf-8?
(lambda () (lambda ()
@ -17724,32 +17724,32 @@
(register-struct-field-mutator! set-cache-from! struct:cache 3) (register-struct-field-mutator! set-cache-from! struct:cache 3)
(void))) (void)))
(define new-cache (lambda () (cache1.1 #f #f #f #f))) (define new-cache (lambda () (cache1.1 #f #f #f #f)))
(define cell.1$5 (unsafe-make-place-local (new-cache))) (define cell.1$7 (unsafe-make-place-local (new-cache)))
(define cell.2$1 (define cell.2$1
(unsafe-make-place-local (|#%app| 1/unsafe-make-custodian-at-root))) (unsafe-make-place-local (|#%app| 1/unsafe-make-custodian-at-root)))
(define convert-cache-init! (define convert-cache-init!
(lambda () (lambda ()
(begin (begin
(unsafe-place-local-set! cell.1$5 (new-cache)) (unsafe-place-local-set! cell.1$7 (new-cache))
(unsafe-place-local-set! (unsafe-place-local-set!
cell.2$1 cell.2$1
(|#%app| 1/unsafe-make-custodian-at-root))))) (|#%app| 1/unsafe-make-custodian-at-root)))))
(define cache-clear! (define cache-clear!
(lambda (get_0 update!_0) (lambda (get_0 update!_0)
(let ((c_0 (|#%app| get_0 (unsafe-place-local-ref cell.1$5)))) (let ((c_0 (|#%app| get_0 (unsafe-place-local-ref cell.1$7))))
(begin (begin
(|#%app| update!_0 (unsafe-place-local-ref cell.1$5) #f) (|#%app| update!_0 (unsafe-place-local-ref cell.1$7) #f)
(if c_0 (1/bytes-close-converter c_0) (void)))))) (if c_0 (1/bytes-close-converter c_0) (void))))))
(define cache-lookup! (define cache-lookup!
(lambda (enc_0 get_0 update!_0) (lambda (enc_0 get_0 update!_0)
(begin (begin
(unsafe-start-atomic) (unsafe-start-atomic)
(begin0 (begin0
(if (equal? enc_0 (cache-enc (unsafe-place-local-ref cell.1$5))) (if (equal? enc_0 (cache-enc (unsafe-place-local-ref cell.1$7)))
(let ((c_0 (|#%app| get_0 (unsafe-place-local-ref cell.1$5)))) (let ((c_0 (|#%app| get_0 (unsafe-place-local-ref cell.1$7))))
(begin (begin
(if c_0 (if c_0
(|#%app| update!_0 (unsafe-place-local-ref cell.1$5) #f) (|#%app| update!_0 (unsafe-place-local-ref cell.1$7) #f)
(void)) (void))
c_0)) c_0))
#f) #f)
@ -17761,18 +17761,18 @@
(unsafe-start-atomic) (unsafe-start-atomic)
(begin0 (begin0
(begin (begin
(if (equal? enc_0 (cache-enc (unsafe-place-local-ref cell.1$5))) (if (equal? enc_0 (cache-enc (unsafe-place-local-ref cell.1$7)))
(void) (void)
(begin (begin
(cache-clear! cache-to set-cache-to!) (cache-clear! cache-to set-cache-to!)
(cache-clear! cache-to_3068 set-cache-to2!) (cache-clear! cache-to_3068 set-cache-to2!)
(cache-clear! cache-from set-cache-from!) (cache-clear! cache-from set-cache-from!)
(set-cache-enc! (unsafe-place-local-ref cell.1$5) enc_0))) (set-cache-enc! (unsafe-place-local-ref cell.1$7) enc_0)))
(if (|#%app| get_0 (unsafe-place-local-ref cell.1$5)) (if (|#%app| get_0 (unsafe-place-local-ref cell.1$7))
(1/bytes-close-converter c_0) (1/bytes-close-converter c_0)
(begin (begin
(bytes-reset-converter c_0) (bytes-reset-converter c_0)
(|#%app| update!_0 (unsafe-place-local-ref cell.1$5) c_0)))) (|#%app| update!_0 (unsafe-place-local-ref cell.1$7) c_0))))
(unsafe-end-atomic))) (unsafe-end-atomic)))
(void)))) (void))))
(define bytes-open-converter/cached-to (define bytes-open-converter/cached-to
@ -34896,11 +34896,11 @@
(for-loop_0 null (hash-iterate-first topics_0))))))))) (for-loop_0 null (hash-iterate-first topics_0)))))))))
(args (raise-binding-result-arity-error 2 args)))))) (args (raise-binding-result-arity-error 2 args))))))
(define make-root-logger (lambda () (create-logger.1 #f 'none #f))) (define make-root-logger (lambda () (create-logger.1 #f 'none #f)))
(define cell.1$4 (unsafe-make-place-local (make-root-logger))) (define cell.1$6 (unsafe-make-place-local (make-root-logger)))
(define unsafe-root-logger (lambda () (unsafe-place-local-ref cell.1$4))) (define unsafe-root-logger (lambda () (unsafe-place-local-ref cell.1$6)))
(define 1/current-logger (define 1/current-logger
(make-parameter (make-parameter
(unsafe-place-local-ref cell.1$4) (unsafe-place-local-ref cell.1$6)
(lambda (l_0) (lambda (l_0)
(begin (begin
(if (1/logger? l_0) (if (1/logger? l_0)
@ -34911,8 +34911,8 @@
(define logger-init! (define logger-init!
(lambda () (lambda ()
(begin (begin
(unsafe-place-local-set! cell.1$4 (make-root-logger)) (unsafe-place-local-set! cell.1$6 (make-root-logger))
(1/current-logger (unsafe-place-local-ref cell.1$4))))) (1/current-logger (unsafe-place-local-ref cell.1$6)))))
(define 1/make-logger (define 1/make-logger
(let ((make-logger_0 (let ((make-logger_0
(|#%name| (|#%name|
@ -34977,14 +34977,14 @@
(begin (begin
(|#%app| start-atomic/no-interrupts) (|#%app| start-atomic/no-interrupts)
(begin0 (begin0
(log-level?* (unsafe-place-local-ref cell.1$4) 'debug 'future) (log-level?* (unsafe-place-local-ref cell.1$6) 'debug 'future)
(|#%app| end-atomic/no-interrupts))))) (|#%app| end-atomic/no-interrupts)))))
(define logging-place-events? (define logging-place-events?
(lambda () (lambda ()
(begin (begin
(|#%app| start-atomic/no-interrupts) (|#%app| start-atomic/no-interrupts)
(begin0 (begin0
(log-level?* (unsafe-place-local-ref cell.1$4) 'debug 'place) (log-level?* (unsafe-place-local-ref cell.1$6) 'debug 'place)
(|#%app| end-atomic/no-interrupts))))) (|#%app| end-atomic/no-interrupts)))))
(define log-level?* (define log-level?*
(lambda (logger_0 level_0 topic_0) (lambda (logger_0 level_0 topic_0)
@ -35158,7 +35158,7 @@
(|#%app| start-atomic/no-interrupts) (|#%app| start-atomic/no-interrupts)
(begin0 (begin0
(log-message* (log-message*
(unsafe-place-local-ref cell.1$4) (unsafe-place-local-ref cell.1$6)
'debug 'debug
'future 'future
message_0 message_0
@ -35172,7 +35172,7 @@
(|#%app| start-atomic/no-interrupts) (|#%app| start-atomic/no-interrupts)
(begin0 (begin0
(log-message* (log-message*
(unsafe-place-local-ref cell.1$4) (unsafe-place-local-ref cell.1$6)
'debug 'debug
'place 'place
message_0 message_0
@ -35448,7 +35448,7 @@
rktio_fs_change rktio_fs_change
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
fn_0 fn_0
(unsafe-place-local-ref cell.1$3)))) (unsafe-place-local-ref cell.1$5))))
(let ((rfc_0 (let ((rfc_0
(if (vector? file-rfc_0) (if (vector? file-rfc_0)
(begin (begin
@ -35482,7 +35482,7 @@
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
base-fn_0 base-fn_0
(unsafe-place-local-ref (unsafe-place-local-ref
cell.1$3))))) cell.1$5)))))
(args (args
(raise-binding-result-arity-error (raise-binding-result-arity-error
3 3
@ -35577,7 +35577,7 @@
(lambda (a_0 b_0) (lambda (a_0 b_0)
(begin (not (eqv? 0 (bitwise-and a_0 b_0)))))))) (begin (not (eqv? 0 (bitwise-and a_0 b_0))))))))
(if (if (set?_0 props_0 16) (if (if (set?_0 props_0 16)
(eq? (unsafe-place-local-ref cell.1$3) rktio_NULL) (eq? (unsafe-place-local-ref cell.1$5) rktio_NULL)
#f) #f)
'#(#f #f #f #f) '#(#f #f #f #f)
(let ((app_0 (if (set?_0 props_0 1) 'supported #f))) (let ((app_0 (if (set?_0 props_0 1) 'supported #f)))
@ -36480,7 +36480,9 @@
(|#%app| 1/unsafe-custodian-unregister sp_0 (subprocess-cust-ref sp_0)) (|#%app| 1/unsafe-custodian-unregister sp_0 (subprocess-cust-ref sp_0))
(set-subprocess-cust-ref! sp_0 #f)) (set-subprocess-cust-ref! sp_0 #f))
(void)))) (void))))
(define subprocess-will-executor (make-will-executor)) (define cell.1$4 (unsafe-make-place-local (make-will-executor)))
(define subprocess-init!
(lambda () (unsafe-place-local-set! cell.1$4 (make-will-executor))))
(define register-subprocess-finalizer (define register-subprocess-finalizer
(letrec ((procz1 (letrec ((procz1
(lambda (sp_0) (lambda (sp_0)
@ -36495,10 +36497,11 @@
(void)) (void))
(no-custodian! sp_0) (no-custodian! sp_0)
#t)))) #t))))
(lambda (sp_0) (will-register subprocess-will-executor sp_0 procz1)))) (lambda (sp_0)
(will-register (unsafe-place-local-ref cell.1$4) sp_0 procz1))))
(define poll-subprocess-finalizations (define poll-subprocess-finalizations
(lambda () (lambda ()
(if (will-try-execute subprocess-will-executor) (if (will-try-execute (unsafe-place-local-ref cell.1$4))
(poll-subprocess-finalizations) (poll-subprocess-finalizations)
(void)))) (void))))
(define 1/current-subprocess-custodian-mode (define 1/current-subprocess-custodian-mode
@ -37251,7 +37254,7 @@
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
addr_0))))))))))))) addr_0)))))))))))))
(loop_0))))))))))))) (loop_0)))))))))))))
(define address-will-executor (make-will-executor)) (define cell.1$3 (unsafe-make-place-local (make-will-executor)))
(define register-address-finalizer (define register-address-finalizer
(letrec ((procz1 (letrec ((procz1
(lambda (addr_0) (lambda (addr_0)
@ -37261,12 +37264,15 @@
(unsafe-place-local-ref cell.1) (unsafe-place-local-ref cell.1)
addr_0) addr_0)
#t)))) #t))))
(lambda (addr_0) (will-register address-will-executor addr_0 procz1)))) (lambda (addr_0)
(will-register (unsafe-place-local-ref cell.1$3) addr_0 procz1))))
(define poll-address-finalizations (define poll-address-finalizations
(lambda () (lambda ()
(if (will-try-execute address-will-executor) (if (will-try-execute (unsafe-place-local-ref cell.1$3))
(poll-address-finalizations) (poll-address-finalizations)
(void)))) (void))))
(define address-init!
(lambda () (unsafe-place-local-set! cell.1$3 (make-will-executor))))
(define struct:connect-progress (define struct:connect-progress
(make-record-type-descriptor* 'connect-progress #f #f #f #f 2 3)) (make-record-type-descriptor* 'connect-progress #f #f #f #f 2 3))
(define effect_2403 (define effect_2403
@ -41169,5 +41175,7 @@
(install-error-value->string-handler!) (install-error-value->string-handler!)
(init-current-directory!) (init-current-directory!)
(init-current-ports! in-fd_0 out-fd_0 err-fd_0 cust_0 plumber_0) (init-current-ports! in-fd_0 out-fd_0 err-fd_0 cust_0 plumber_0)
(subprocess-init!)
(address-init!)
(sync-locale!)))) (sync-locale!))))
(define io-place-destroy! (lambda () (rktio-place-destroy!))) (define io-place-destroy! (lambda () (rktio-place-destroy!)))

View File

@ -139,6 +139,11 @@
(loop target)) (loop target))
(loop key-rhs) (loop key-rhs)
(loop val-rhs)] (loop val-rhs)]
[`(will-register ,target ,es ...)
(if (symbol? target)
(found-state! target e)
(loop target))
(for-each loop es)]
[`(,es ...) [`(,es ...)
(for ([e (in-list es)]) (for ([e (in-list es)])
(loop e))] (loop e))]

View File

@ -33,6 +33,9 @@
shared-ltps-place-init!) shared-ltps-place-init!)
(only-in "locale/cache.rkt" (only-in "locale/cache.rkt"
convert-cache-init!) convert-cache-init!)
(only-in "network/address.rkt"
address-init!)
(submod "subprocess/main.rkt" init)
(only-in "locale/parameter.rkt" (only-in "locale/parameter.rkt"
sync-locale!) sync-locale!)
"port/place.rkt") "port/place.rkt")
@ -72,6 +75,8 @@
(install-error-value->string-handler!) (install-error-value->string-handler!)
(init-current-directory!) (init-current-directory!)
(init-current-ports! in-fd out-fd err-fd cust plumber) (init-current-ports! in-fd out-fd err-fd cust plumber)
(subprocess-init!)
(address-init!)
(sync-locale!)) (sync-locale!))
(define (io-place-destroy!) (define (io-place-destroy!)

View File

@ -3,11 +3,13 @@
"../string/convert.rkt" "../string/convert.rkt"
"../host/rktio.rkt" "../host/rktio.rkt"
"../host/thread.rkt" "../host/thread.rkt"
"../host/place-local.rkt"
"evt.rkt" "evt.rkt"
"error.rkt") "error.rkt")
(provide call-with-resolved-address (provide call-with-resolved-address
register-address-finalizer) register-address-finalizer
address-init!)
;; in atomic mode ;; in atomic mode
(define (call-with-resolved-address hostname port-no proc (define (call-with-resolved-address hostname port-no proc
@ -79,7 +81,7 @@
;; ---------------------------------------- ;; ----------------------------------------
(define address-will-executor (make-will-executor)) (define-place-local address-will-executor (make-will-executor))
(define (register-address-finalizer addr) (define (register-address-finalizer addr)
(will-register address-will-executor (will-register address-will-executor
@ -91,3 +93,6 @@
(define (poll-address-finalizations) (define (poll-address-finalizations)
(when (will-try-execute address-will-executor) (when (will-try-execute address-will-executor)
(poll-address-finalizations))) (poll-address-finalizations)))
(define (address-init!)
(set! address-will-executor (make-will-executor)))

View File

@ -4,6 +4,7 @@
"../host/rktio.rkt" "../host/rktio.rkt"
"../host/error.rkt" "../host/error.rkt"
"../host/thread.rkt" "../host/thread.rkt"
"../host/place-local.rkt"
"../path/path.rkt" "../path/path.rkt"
"../path/parameter.rkt" "../path/parameter.rkt"
"../port/output-port.rkt" "../port/output-port.rkt"
@ -242,7 +243,11 @@
(unsafe-custodian-unregister sp (subprocess-cust-ref sp)) (unsafe-custodian-unregister sp (subprocess-cust-ref sp))
(set-subprocess-cust-ref! sp #f))) (set-subprocess-cust-ref! sp #f)))
(define subprocess-will-executor (make-will-executor)) (define-place-local subprocess-will-executor (make-will-executor))
(define (subprocess-init!)
(set! subprocess-will-executor (make-will-executor)))
(module+ init (provide subprocess-init!))
(define (register-subprocess-finalizer sp) (define (register-subprocess-finalizer sp)
(will-register subprocess-will-executor (will-register subprocess-will-executor