diff options
Diffstat (limited to 'vxi11_server.c')
-rw-r--r-- | vxi11_server.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/vxi11_server.c b/vxi11_server.c index 3272b32..950a31d 100644 --- a/vxi11_server.c +++ b/vxi11_server.c @@ -36,21 +36,12 @@ static void waitForLock(long timeout) { } -static bool lock(int lid) { - if ((globals.VxiLocks.locked_network_server = NO_SERVER_LOCKED)) - return false; +static void lock(int lid) { globals.VxiLocks.locked_network_server = lid; } -static bool unlock(int lid) { - if ((globals.VxiLocks.locked_network_server = NO_SERVER_LOCKED)) - return false; - else if (globals.VxiLocks.locked_network_server != lid) - return false; - else { - globals.VxiLocks.locked_network_server = NO_SERVER_LOCKED; - return true; - } +static void unlock() { + globals.VxiLocks.locked_network_server = NO_SERVER_LOCKED; } Device_Error * @@ -168,11 +159,20 @@ device_local_1_svc(Device_GenericParms *argp, struct svc_req *rqstp) { Device_Error * device_lock_1_svc(Device_LockParms *argp, struct svc_req *rqstp) { - printf("device_lock_1_svc()\n"); - static Device_Error result; - result.error = 0; + printf("device_lock_1_svc()\n"); + if (isLocked(argp->lid)) { + result.error = ERR_DEVICELOCKEDBYANOTHERLINK; + if (haveLock(argp->lid)) { + // maybe do something here to warn about a device trying to lock multiple times? + } + } + else { + lock(argp->lid); + result.error = 0; + } + return &result; } @@ -180,10 +180,13 @@ Device_Error * device_unlock_1_svc(Device_Link *argp, struct svc_req *rqstp) { static Device_Error result; printf("device_unlock_1_svc()\n"); - /* - * insert server code here - */ - result.error = 0; + + if (!isLocked(*argp) || !haveLock(*argp)) + result.error = ERR_NOLOCKHELDBYTHISLINK; + else { + result.error = 0; + unlock(); + } return &result; } |