IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 4637


Ignore:
Timestamp:
Jul 27, 2005, 4:55:20 PM (21 years ago)
Author:
jhoblitt
Message:

add nebLock() & nebUnlock() src

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Nebulous/nebclient/src/nebclient.c

    r4635 r4637  
    44 * Copyright (C) 2005  Joshua Hoblitt
    55 *
    6  * $Id: nebclient.c,v 1.27 2005-07-28 02:07:13 jhoblitt Exp $
     6 * $Id: nebclient.c,v 1.28 2005-07-28 02:55:20 jhoblitt Exp $
    77 */
    88
     
    1818#include <stdbool.h>
    1919#include <stdarg.h>
     20#include <time.h>
    2021#include "xmalloc.h"
    2122#include "soapH.h"
     
    2425
    2526#define ERRBUF_SIZE 2048
     27#define LOCK_TIMEOUT 10
     28#define LOCK_INTERVAL 1
    2629
    2730#define nebSetErr(server,...) \
     
    199202bool nebLock(nebServer *server, const char *key, nebRW flag)
    200203{
    201 
    202     return true;
     204    time_t          endtime;
     205    char            *type;
     206    int             response;
     207
     208    type = flag == NEB_READ ? "read" : "write";
     209
     210    endtime = time(NULL) + LOCK_TIMEOUT;
     211
     212    while (time(NULL) < endtime) {
     213        if (soap_call_ns1__lock_USCOREobject(server->soap, server->endpoint,
     214            NULL, (char *)key, type, &response) != SOAP_OK) {
     215            nebSetServerErr(server);
     216            return false;
     217        }
     218
     219        if (response) {
     220            return true;
     221        }
     222
     223        sleep(LOCK_INTERVAL);
     224    }
     225
     226    // else, we never got a lock
     227    nebSetErr(server, "can not get a %s lock", type);
     228
     229    return false;
    203230}
    204231
    205232bool nebUnlock(nebServer *server, const char *key, nebRW flag)
    206233{
    207 
    208     return true;
     234    char            *type;
     235    int             response;
     236
     237    type = flag == NEB_READ ? "read" : "write";
     238
     239    if (soap_call_ns1__unlock_USCOREobject(server->soap, server->endpoint,
     240        NULL, (char *)key, type, &response) != SOAP_OK) {
     241        nebSetServerErr(server);
     242        return false;
     243    }
     244
     245    if (response) {
     246        return true;
     247    }
     248
     249    // else, we never got a lock
     250    nebSetErr(server, "can not release %s lock", type);
     251
     252    return false;
    209253}
    210254
Note: See TracChangeset for help on using the changeset viewer.