From 06ac9feb95bc9a984e47fc734fcbc50c7c94b836 Mon Sep 17 00:00:00 2001 From: hadaq Date: Thu, 23 May 2002 01:50:27 +0000 Subject: [PATCH] *** empty log message *** --- allParam/ca/client/caParam.c | 150 ++++++++++++---------- allParam/ca/server/Makefile | 2 +- allParam/ca/server/arrayDest.cc | 1 + allParam/ca/server/paramBlobRecord.cc | 1 + allParam/ca/server/paramFilenameRecord.cc | 1 + allParam/ca/server/paramIntRecord.cc | 1 + allParam/ca/server/paramRecord.cc | 1 + allParam/ca/server/paramRecordSet.cc | 1 + allParam/ca/server/paramServer.cc | 1 + allParam/ca/server/paramStringRecord.cc | 1 + 10 files changed, 89 insertions(+), 71 deletions(-) diff --git a/allParam/ca/client/caParam.c b/allParam/ca/client/caParam.c index ef5115a..badced1 100644 --- a/allParam/ca/client/caParam.c +++ b/allParam/ca/client/caParam.c @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/client/caParam.c,v 1.16 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #include @@ -8,13 +9,15 @@ #include #include #include +#include #include #include #include -#define TIMEOUT 0.2 +#define TIMEOUTEVT 0.002 +#define TIMEOUTIO 10.0 static void Param_copyStringsToAllocMem(struct event_handler_args args); static void Param_copyIntsToAllocMem(struct event_handler_args args); @@ -23,7 +26,6 @@ static void Param_returnPVName(const Param *my, const char *, const char *, cons static void Param_strerror(Param *, const char *); static int Param_getIntArrayCache(const Param *, const char *, const char *, int, int *, unsigned long int *); static int Param_getStringArrayCache(const Param *, const char *, const char *, int, int *, char **); -static int Param_getFilenameArrayCache(const Param *, const char *, const char *, int, int *, char **); static int Param_storeIntCache(const Param *, const char *, const char *, unsigned long int); static int Param_storeStringCache(const Param *, const char *, const char *, const char *); @@ -38,6 +40,7 @@ typedef struct ParamStringResultS { int maxrows; const Param *my; int *retVal; + int *isReady; } ParamStringResult; typedef struct ParamIntResultS { @@ -46,6 +49,7 @@ typedef struct ParamIntResultS { int maxrows; const Param *my; int *retVal; + int *isReady; } ParamIntResult; typedef struct ParamBlobResultS { @@ -53,25 +57,21 @@ typedef struct ParamBlobResultS { size_t *size; const Param *my; int *retVal; + int *isReady; } ParamBlobResult; int conSetupParam(Param *my, const char *setup) { + struct utsname bufferS, *buffer = &bufferS; int retVal = 0; + int row = 0; int status = ECA_NORMAL; #if ( _POSIX_VERSION < 199506L ) - pthread_mutexattr_t *attr; + int *attr; #endif my->strerror = NULL; my->specParam = malloc(sizeof(CaParam)); - if(setup != NULL) { - my->setup = malloc(strlen(setup) + 1); - strcpy(my->setup, setup); - } else { - my->setup = NULL; - } - #if ( _POSIX_VERSION < 199506L ) ((CaParam *) (my->specParam))->cacheLock = malloc(sizeof(pthread_mutex_t)); pthread_mutexattr_create(attr); @@ -86,7 +86,22 @@ int conSetupParam(Param *my, const char *setup) if((status = ca_task_initialize()) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); + free(((CaParam *) (my->specParam))->cacheLock); retVal = -1; + } else { + if(setup != NULL) { + my->setup = malloc(strlen(setup) + 1); + strcpy(my->setup, setup); + } else { + my->setup = NULL; + } + my->basedir = malloc(PARAM_MAX_VALUE_LEN); + uname(buffer); + if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { + strcpy(my->basedir, ""); + } else if (strlen(my->basedir)) { + strcat(my->basedir, "/"); + } } return retVal; @@ -104,6 +119,7 @@ void desParam(Param *my) Tcl_DeleteInterp(((CaParam *) (my->specParam))->cache); pthread_mutex_destroy(((CaParam *) (my->specParam))->cacheLock); free(((CaParam *) (my->specParam))->cacheLock); + free(my->basedir); if(my->setup != NULL) { free(my->setup); } @@ -126,6 +142,7 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r int Param_getIntArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val) { + int isReadyS, *isReady = &isReadyS; int retVal = 0; int status; int found = 1; @@ -147,7 +164,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma retVal = -1; } else { - if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -159,13 +176,14 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma result->maxrows = maxrows; result->my = my; result->retVal = &retVal; + result->isReady = isReady; + *isReady = 1; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyIntsToAllocMem, result); Param_strerror((Param *) my, ca_message(status)); - - if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); - } + do { + status = ca_pend_event(TIMEOUTEVT); + } while(*isReady == 1); } } @@ -190,6 +208,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma int Param_getStringArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) { + int isReadyS, *isReady = &isReadyS; int retVal = 0; int status; int found = 1; @@ -211,7 +230,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int retVal = -1; } else { - if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -223,13 +242,15 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int result->maxrows = maxrows; result->my = my; result->retVal = &retVal; + result->isReady = isReady; + *isReady = 1; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result); Param_strerror((Param *) my, ca_message(status)); - if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); - } + do { + status = ca_pend_event(TIMEOUTEVT); + } while(*isReady == 1); } if((status = ca_clear_channel(chan)) != ECA_NORMAL) { @@ -254,16 +275,18 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) { + int isReadyS, *isReady = &isReadyS; int retVal = 0; int status; int found = 1; chid chan; char *pPVName; int i; + char *prefixVal[PARAM_MAX_ARRAY_LEN]; char buf[PARAM_MAX_NAME_LEN]; - *rows = 0; - if(Param_getFilenameArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) { + + if(Param_getStringArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) { pPVName = malloc((strlen("HAD:PF:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char)); Param_returnPVName(my, "PF", name, idx, pPVName); @@ -275,7 +298,7 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i retVal = -1; } else { - if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -287,12 +310,31 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i result->maxrows = maxrows; result->my = my; result->retVal = &retVal; + result->isReady = isReady; + *isReady = 1; + + for (i = 0 ; i < maxrows ; i++) { + prefixVal[i] = malloc(PARAM_MAX_VALUE_LEN); + } + result->val = prefixVal; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result); Param_strerror((Param *) my, ca_message(status)); - if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); + do { + status = ca_pend_event(TIMEOUTEVT); + } while(*isReady == 1); + + for (i = 0 ; i < *rows ; i++) { + if (*prefixVal[i] == '/') { + strcpy(val[i], prefixVal[i]); + } else { + strcpy(val[i], my->basedir); + strcat(val[i], prefixVal[i]); + } + } + for (i = 0 ; i < maxrows ; i++) { + free(prefixVal[i]); } } } @@ -318,6 +360,7 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *size, FILE **val) { + int isReadyS, *isReady = &isReadyS; int retVal = 0; int status; int found = 1; @@ -335,7 +378,7 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si retVal = -1; } else { - if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -352,13 +395,15 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si result->size = size; result->my = my; result->retVal = &retVal; + result->isReady = isReady; + *isReady = 1; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyBlobToAllocMem, result); Param_strerror((Param *) my, ca_message(status)); - if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); - } + do { + status = ca_pend_event(TIMEOUTEVT); + } while(*isReady == 1); } } @@ -390,7 +435,7 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned retVal = -1; } else { - if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -399,7 +444,7 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned status = ca_put(DBR_LONG, chan, &value); Param_strerror((Param *) my, ca_message(status)); - if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); } } @@ -433,7 +478,7 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const retVal = -1; } else { - if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -442,7 +487,7 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const status = ca_put(DBR_STRING, chan, value); Param_strerror((Param *) my, ca_message(status)); - if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) { + if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); } } @@ -488,6 +533,7 @@ static void Param_copyStringsToAllocMem(struct event_handler_args args) Param_strerror((Param *) result->my, ca_message(args.status)); *(result->rows) = 0; } + *(result->isReady) = 0; } static void Param_copyIntsToAllocMem(struct event_handler_args args) @@ -516,6 +562,7 @@ static void Param_copyIntsToAllocMem(struct event_handler_args args) *(result->rows) = 0; } } + *(result->isReady) = 0; } static void Param_copyBlobToAllocMem(struct event_handler_args args) @@ -531,6 +578,7 @@ static void Param_copyBlobToAllocMem(struct event_handler_args args) Param_strerror((Param *) result->my, ca_message(args.status)); *(result->size) = 0; } + *(result->isReady) = 0; } static void Param_returnPVName(const Param *my, const char *type, const char *name, const char *idx, char *pPVName) @@ -620,44 +668,6 @@ static int Param_getStringArrayCache(const Param *my, const char *name, const ch return retVal; } -static int Param_getFilenameArrayCache(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) -{ - int retVal = 0; - int row = 0; - int i; - char *value[PARAM_MAX_ARRAY_LEN]; - - for (i = 0 ; i < maxrows ; i++) { - value[i] = malloc(PARAM_MAX_VALUE_LEN); - } - - if (((retVal = Param_getStringArrayCache(my, name, idx, maxrows, rows, value)) == 0) && (*rows > 0)) { - char basedir[PARAM_MAX_VALUE_LEN]; - - if ((Param_getStringCache(my, "glob", "basedir", &row, basedir) == 0) && (row == 1)) { - strcat(basedir, "/"); - } else { - strcpy(basedir, ""); - } - for (i = 0 ; i < *rows ; i++) { - if (value[i][0] != '/') { - strcpy(val[i], basedir); - } else { - strcpy(val[i], ""); - } - strcat(val[i], value[i]); - } - } else { - *rows = 0; - } - - for (i = 0 ; i < maxrows ; i++) { - free(value[i]); - } - - return retVal; -} - static int Param_storeIntCache(const Param *my, const char *name, const char *idx, unsigned long int value) { char buf[7 + 2 * PARAM_MAX_NAME_LEN + PARAM_MAX_VALUE_LEN]; diff --git a/allParam/ca/server/Makefile b/allParam/ca/server/Makefile index b7143d1..3669628 100644 --- a/allParam/ca/server/Makefile +++ b/allParam/ca/server/Makefile @@ -35,7 +35,7 @@ daq_psql_param_cas : $(OBJS) ../../psql/libpsqlParam.a daq_tcl_param_cas : $(OBJS) ../../tcl/libtclParam.a $(MAKE) daq_param_cas \ - "LOADLIBES=-L../../tcl -ltclParam -ltcl -lm -ldl $(LOADLIBES)" + "LOADLIBES=-L../../tcl -ltclParam -ltcl -lm $(LOADLIBES) -lnetinet" $(MV) daq_param_cas $@ daq_param_cas : diff --git a/allParam/ca/server/arrayDest.cc b/allParam/ca/server/arrayDest.cc index 2147a25..f817eab 100644 --- a/allParam/ca/server/arrayDest.cc +++ b/allParam/ca/server/arrayDest.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/arrayDest.cc,v 1.2 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #include diff --git a/allParam/ca/server/paramBlobRecord.cc b/allParam/ca/server/paramBlobRecord.cc index 163d5cf..9185c3c 100644 --- a/allParam/ca/server/paramBlobRecord.cc +++ b/allParam/ca/server/paramBlobRecord.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramBlobRecord.cc,v 1.12 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L extern "C" { diff --git a/allParam/ca/server/paramFilenameRecord.cc b/allParam/ca/server/paramFilenameRecord.cc index 7fb1005..468bf8a 100644 --- a/allParam/ca/server/paramFilenameRecord.cc +++ b/allParam/ca/server/paramFilenameRecord.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramFilenameRecord.cc,v 1.7 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L extern "C" { diff --git a/allParam/ca/server/paramIntRecord.cc b/allParam/ca/server/paramIntRecord.cc index ef06adc..a7fe3e1 100644 --- a/allParam/ca/server/paramIntRecord.cc +++ b/allParam/ca/server/paramIntRecord.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.11 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L extern "C" { diff --git a/allParam/ca/server/paramRecord.cc b/allParam/ca/server/paramRecord.cc index ad4861a..b8b67a7 100644 --- a/allParam/ca/server/paramRecord.cc +++ b/allParam/ca/server/paramRecord.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/Attic/paramRecord.cc,v 1.8 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L extern "C" { diff --git a/allParam/ca/server/paramRecordSet.cc b/allParam/ca/server/paramRecordSet.cc index 5760ab5..51e92c5 100644 --- a/allParam/ca/server/paramRecordSet.cc +++ b/allParam/ca/server/paramRecordSet.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramRecordSet.cc,v 1.9 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L extern "C" { diff --git a/allParam/ca/server/paramServer.cc b/allParam/ca/server/paramServer.cc index ee7d7e8..958cbb7 100644 --- a/allParam/ca/server/paramServer.cc +++ b/allParam/ca/server/paramServer.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.4 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #include diff --git a/allParam/ca/server/paramStringRecord.cc b/allParam/ca/server/paramStringRecord.cc index cfee87a..6f662b3 100644 --- a/allParam/ca/server/paramStringRecord.cc +++ b/allParam/ca/server/paramStringRecord.cc @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.10 2002-05-23 01:50:27 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L extern "C" { -- 2.43.0