X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Ffastcgi.c;h=6b2957e9f52359399366c8d28fcfeca822db7d3c;hb=9e7cfbbc6137056bba8ed8644fc6ecfe398553fe;hp=05dae343f8eb2c33106709a2090cdd51c8b72c94;hpb=46c219c69676ea4e6f467692b7db6e48a708ab80;p=matches%2FMCTX3420.git diff --git a/server/fastcgi.c b/server/fastcgi.c index 05dae34..6b2957e 100644 --- a/server/fastcgi.c +++ b/server/fastcgi.c @@ -439,6 +439,7 @@ void * FCGI_RequestLoop (void *data) Log(LOGDEBUG, "Got request #%d", context.response_number); ModuleHandler module_handler = NULL; char module[BUFSIZ], params[BUFSIZ]; + bool lock_required = false; //strncpy doesn't zero-truncate properly snprintf(module, BUFSIZ, "%s", getenv("DOCUMENT_URI_LOCAL")); @@ -462,13 +463,21 @@ void * FCGI_RequestLoop (void *data) module_handler = Control_Handler; } else if (!strcmp("sensors", module)) { module_handler = Sensor_Handler; + lock_required = true; } else if (!strcmp("actuators", module)) { module_handler = Actuator_Handler; + lock_required = true; } context.current_module = module; if (module_handler) { - module_handler(&context, params); + if (lock_required && !Control_Lock()) { + FCGI_RejectJSONEx(&context, STATUS_NOTRUNNING, "Experiment is not running."); + } else { + module_handler(&context, params); + if (lock_required) + Control_Unlock(); + } } else { FCGI_RejectJSON(&context, "Unhandled module"); }