diff --git a/pkgs/racket-test-core/tests/racket/file.rktl b/pkgs/racket-test-core/tests/racket/file.rktl index 20bbc3f118..9ef5b34a19 100644 --- a/pkgs/racket-test-core/tests/racket/file.rktl +++ b/pkgs/racket-test-core/tests/racket/file.rktl @@ -1696,6 +1696,8 @@ ;; The `ffi/file` library - - - - - - - - - - - - - - - - - - - +(define no-op (lambda (x) #f)) + (let () (define pub-mod (collection-file-path "list.rkt" "racket")) (define priv-mod (collection-file-path "stx.rkt" "racket/private")) @@ -1724,11 +1726,15 @@ void void)) (define (mk-fun modes) - ;; receives path pointer, casts as int, who cares - (get-ffi-obj "scheme_make_integer_value" (ffi-lib #f) - (_fun (path) :: - (path : (_file/guard modes 'me)) - -> _scheme))) + ;; receives path pointer; the rest doesn't matter + (cast no-op + ;; turns `no-op` into a callback: + (_fun _pointer -> _scheme) + ;; turns the callback into a callout, which is what we want + ;; to test `_file/guard`: + (_fun (path) :: + (path : (_file/guard modes 'me)) + -> _scheme))) (define (fun path modes) ((mk-fun modes) path)) diff --git a/racket/src/io/network/tcp-port.rkt b/racket/src/io/network/tcp-port.rkt index 2b9fa902f5..3f6b5bff3c 100644 --- a/racket/src/io/network/tcp-port.rkt +++ b/racket/src/io/network/tcp-port.rkt @@ -2,6 +2,7 @@ (require "../common/check.rkt" "../host/rktio.rkt" "../port/port.rkt" + "../port/close.rkt" "../port/input-port.rkt" "../port/output-port.rkt" "../port/fd-port.rkt" @@ -61,10 +62,20 @@ (define/who (tcp-port? p) (tcp-data? (port-tcp-data p))) -(define/who (tcp-abandon-port p) +(define/who (tcp-abandon-port given-p) + (define p (cond + [(input-port? given-p) + (->core-input-port given-p)] + [(output-port? given-p) + (->core-output-port given-p)] + [else #f])) (define data (port-tcp-data p)) (unless (tcp-data? data) (raise-argument-error who "tcp-port?" p)) (if (input-port? p) - (set-tcp-data-abandon-in?! data #t) - (set-tcp-data-abandon-out?! data #t))) + (begin + (set-tcp-data-abandon-in?! data #t) + (close-port p)) + (begin + (set-tcp-data-abandon-out?! data #t) + (close-port p))))