diff --git a/pkgs/racket-test-core/tests/racket/place.rktl b/pkgs/racket-test-core/tests/racket/place.rktl index 639a36cb65..a8e135c589 100644 --- a/pkgs/racket-test-core/tests/racket/place.rktl +++ b/pkgs/racket-test-core/tests/racket/place.rktl @@ -52,8 +52,11 @@ ;interned into the same table as us and us2 ;because the same place sends and receives (test #t equal? us (car r2)) - (test #t equal? us2 (cdr r2)))) - + (test #t equal? us2 (cdr r2))) + + (place-channel-put out (make-prefab-struct 'vec (vector) (vector))) + (test (make-prefab-struct 'vec (vector) (vector)) place-channel-get in)) + (let ([p (place/splat (p1 ch) (printf "Hello form place 2\n") (exit 99))]) diff --git a/racket/src/thread/place-message.rkt b/racket/src/thread/place-message.rkt index 4d50b641cd..5470e44099 100644 --- a/racket/src/thread/place-message.rkt +++ b/racket/src/thread/place-message.rkt @@ -81,11 +81,13 @@ (define graph #f) (define used #f) (define (maybe-ph ph v) - (if (and used (hash-ref used ph #f)) - (begin - (placeholder-set! ph v) - ph) - v)) + (cond + [(and used (hash-ref used ph #f)) + (placeholder-set! ph v) + ph] + [else + (hash-set! graph v #f) + v])) (define new-v (let loop ([v v]) (cond