From 15812a94d8c33d339b1727fa2f9a6634ec2d2f07 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 14 Oct 2012 11:03:44 -0400 Subject: [PATCH] make `make-fsemaphore' atomic (i.e., not blocking) --- src/racket/src/future.c | 5 +++-- src/racket/src/type.c | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/racket/src/future.c b/src/racket/src/future.c index 58babfef63..93f8b97367 100644 --- a/src/racket/src/future.c +++ b/src/racket/src/future.c @@ -3021,8 +3021,9 @@ Scheme_Object *scheme_rtcall_make_fsemaphore(Scheme_Object *ready) future->source_of_request = "[make_fsemaphore]"; future->source_type = FSRC_OTHER; - /* conservative check for when creation can succeed atomically: */ - if (SCHEME_INT_VAL(ready) + /* conservative check for when creation can succeed atomically + (because it won't raise an error): */ + if (SCHEME_INTP(ready) && (SCHEME_INT_VAL(ready) >= 0) && (SCHEME_INT_VAL(ready) < 1024)) is_atomic = 1; diff --git a/src/racket/src/type.c b/src/racket/src/type.c index dd06b96d5d..0ed1de3248 100644 --- a/src/racket/src/type.c +++ b/src/racket/src/type.c @@ -295,6 +295,7 @@ scheme_init_type () set_name(scheme_log_reader_type, ""); set_name(scheme_future_type, ""); + set_name(scheme_fsemaphore_type, ""); set_name(_scheme_values_types_, ""); set_name(_scheme_compiled_values_types_, "");