make `make-fsemaphore' atomic (i.e., not blocking)

This commit is contained in:
Matthew Flatt 2012-10-14 11:03:44 -04:00
parent 33db9589a4
commit 15812a94d8
2 changed files with 4 additions and 2 deletions

View File

@ -3021,8 +3021,9 @@ Scheme_Object *scheme_rtcall_make_fsemaphore(Scheme_Object *ready)
future->source_of_request = "[make_fsemaphore]"; future->source_of_request = "[make_fsemaphore]";
future->source_type = FSRC_OTHER; future->source_type = FSRC_OTHER;
/* conservative check for when creation can succeed atomically: */ /* conservative check for when creation can succeed atomically
if (SCHEME_INT_VAL(ready) (because it won't raise an error): */
if (SCHEME_INTP(ready)
&& (SCHEME_INT_VAL(ready) >= 0) && (SCHEME_INT_VAL(ready) >= 0)
&& (SCHEME_INT_VAL(ready) < 1024)) && (SCHEME_INT_VAL(ready) < 1024))
is_atomic = 1; is_atomic = 1;

View File

@ -295,6 +295,7 @@ scheme_init_type ()
set_name(scheme_log_reader_type, "<log-receiver>"); set_name(scheme_log_reader_type, "<log-receiver>");
set_name(scheme_future_type, "<future>"); set_name(scheme_future_type, "<future>");
set_name(scheme_fsemaphore_type, "<fsemaphore>");
set_name(_scheme_values_types_, "<resurrected>"); set_name(_scheme_values_types_, "<resurrected>");
set_name(_scheme_compiled_values_types_, "<internal>"); set_name(_scheme_compiled_values_types_, "<internal>");