]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authorhadaq <hadaq>
Thu, 23 May 2002 01:50:27 +0000 (01:50 +0000)
committerhadaq <hadaq>
Thu, 23 May 2002 01:50:27 +0000 (01:50 +0000)
allParam/ca/client/caParam.c
allParam/ca/server/Makefile
allParam/ca/server/arrayDest.cc
allParam/ca/server/paramBlobRecord.cc
allParam/ca/server/paramFilenameRecord.cc
allParam/ca/server/paramIntRecord.cc
allParam/ca/server/paramRecord.cc
allParam/ca/server/paramRecordSet.cc
allParam/ca/server/paramServer.cc
allParam/ca/server/paramStringRecord.cc

index ef5115a8e78cc7a63643c763399b117d02078d4e..badced12a190315d87019ce8d105780c9e338088 100644 (file)
@@ -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 <unistd.h>
@@ -8,13 +9,15 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/utsname.h>
 
 #include <cadef.h>
 #include <tcl.h>
 
 #include <allParam.h>
 
-#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];
index b7143d10691f969f85fe780873e59922bb92d51f..36696289efa5fc2aa8e2d03279436c509ca9fdc4 100644 (file)
@@ -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 :
index 2147a2572e19f44bb55482313183ae4ef8b3b248..f817eabbb7046fc9c6e4bb2f3e4a8617cf443414 100644 (file)
@@ -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 <aitTypes.h>
index 163d5cff7d2f34dea1bb9d5d67eda0e254231f26..9185c3c433bc9f874d503d8aa3318fea3fe9733a 100644 (file)
@@ -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" {
index 7fb100517ebbc594e05ac9a54739c118f555c2d8..468bf8a9d8eab25929b537c2ad0aca5fe8dfefb8 100644 (file)
@@ -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" {
index ef06adc8c51842084a08eb380569bbf95bdc75b8..a7fe3e165009ed603e548ede13a104df7a6f9421 100644 (file)
@@ -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" {
index ad4861a3701e485172cdcff02c1c798dfcdda30a..b8b67a72eb5c8dd49eaeb4e84904b934c57b753f 100644 (file)
@@ -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" {
index 5760ab522a6f588eecff28b795cddfda1b1bdb53..51e92c5c84d87e91c8ef94c9877bb5b480ad9300 100644 (file)
@@ -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" {
index ee7d7e88e602769ef2c8bc0f208deacc49058c43..958cbb74db2c338eba8de1c7557cd61513636d66 100644 (file)
@@ -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 <stdiostream.h>
index cfee87a13d92959ba4a4cf73abbd9572cb233876..6f662b3a5be93d4414c0f6e4eb5a84fc25bd209e 100644 (file)
@@ -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" {