From fd642d2715d15b57a586315d5c85155207355cee Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 31 Jan 2021 07:39:30 -0700 Subject: [PATCH] test to check that callbacks are in atomic mode --- pkgs/racket-test-core/tests/racket/foreign-test.rktl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/foreign-test.rktl b/pkgs/racket-test-core/tests/racket/foreign-test.rktl index 89e40796d9..367bf96ef9 100644 --- a/pkgs/racket-test-core/tests/racket/foreign-test.rktl +++ b/pkgs/racket-test-core/tests/racket/foreign-test.rktl @@ -9,6 +9,7 @@ ffi/unsafe/define ffi/unsafe/define/conventions ffi/unsafe/global + ffi/unsafe/atomic ffi/vector racket/extflonum racket/place @@ -339,13 +340,18 @@ ;; test sending a callback for C to hold, preventing the callback from GCing (let ([with-keeper (lambda (k) + (define (sqr x) + (when (eq? (system-type 'vm) 'chez-scheme) + (test #t in-atomic-mode?)) + (* x x)) (t (void) 'grab_callback (_fun (_fun #:keep k _int -> _int) -> _void) sqr) (t 9 'use_grabbed_callback (_fun _int -> _int) 3) (collect-garbage) ; make sure it survives a GC (t 25 'use_grabbed_callback (_fun _int -> _int) 5) (collect-garbage) - (t 81 'use_grabbed_callback (_fun _int -> _int) 9))]) + (t 81 'use_grabbed_callback (_fun _int -> _int) 9) + (void/reference-sink sqr))]) (with-keeper #t) (let ([b (box #f)]) (with-keeper b)