diff --git a/pkgs/racket-test/tests/racket/contract/prof.rkt b/pkgs/racket-test/tests/racket/contract/prof.rkt index 47c19c46a7..714197ddec 100644 --- a/pkgs/racket-test/tests/racket/contract/prof.rkt +++ b/pkgs/racket-test/tests/racket/contract/prof.rkt @@ -513,4 +513,12 @@ 'pos 'neg) 1)) + (test/spec-passed + 'contract-marks56 + '(let () + (eval '(require racket/async-channel)) + (eval '(define c (contract (async-channel/c pos-blame?) (make-async-channel) 'pos 'neg))) + (eval '(async-channel-put c 3)) + (eval '(async-channel-get c)))) + ) diff --git a/racket/collects/racket/async-channel.rkt b/racket/collects/racket/async-channel.rkt index e4249b7519..c3858d2336 100644 --- a/racket/collects/racket/async-channel.rkt +++ b/racket/collects/racket/async-channel.rkt @@ -215,10 +215,17 @@ (define pos-elem-proj (lnp blame)) (define neg-elem-proj (lnp (blame-swap blame))) (λ (val neg-party) + (define blame+neg-party (cons blame neg-party)) (check-async-channel/c ctc val blame neg-party) (impersonate/chaperone-async-channel val - (λ (v) (pos-elem-proj v neg-party)) - (λ (v) (neg-elem-proj v neg-party)) + (λ (v) + (with-contract-continuation-mark + blame+neg-party + (pos-elem-proj v neg-party))) + (λ (v) + (with-contract-continuation-mark + blame+neg-party + (neg-elem-proj v neg-party))) impersonator-prop:contracted ctc impersonator-prop:blame blame))))