]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Totally serializing oracle access (which is absoltely not thread-safe).
authorsailer <sailer>
Mon, 31 Mar 2003 17:15:54 +0000 (17:15 +0000)
committersailer <sailer>
Mon, 31 Mar 2003 17:15:54 +0000 (17:15 +0000)
-- Benjamin Sailer

allParam/ora/oraParam.pc

index 7680adba464abbc9a78431b811e1d4fd40c36a6c..93699facd35d18be023e2ecc21c2c3f0fb66b9e8 100644 (file)
@@ -1,4 +1,4 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ora/oraParam.pc,v 1.31 2003-02-10 13:43:52 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ora/oraParam.pc,v 1.32 2003-03-31 17:15:54 sailer Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #if HAVE_CONFIG_H
@@ -21,9 +21,9 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild
 
 #include "../include/allParam.h"
 
-static void Param_rollback();
+static void Param_rollback(const Param *param);
 
-static void Param_strerror(const Param *, const char *);
+static void Param_strerror(const Param *param, const char *msg);
 
 typedef struct OraParamS {
        const char *user;
@@ -130,9 +130,6 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
        int retVal = 0;
        int i;
 
-       EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
-       EXEC SQL WHENEVER SQLERROR DO Param_rollback();
-
        EXEC SQL BEGIN DECLARE SECTION;
        int l_valid;
        int l_locked;
@@ -160,6 +157,9 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
        if (0 == pthread_mutex_lock(((OraParam *) (my->specParam))->dbLock)) {
 #endif /* PTHREADS */
 
+               EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
+               EXEC SQL WHENEVER SQLERROR DO Param_rollback(my);
+
                if (my->setup != NULL) {
                        EXEC SQL EXECUTE
                                BEGIN
@@ -226,13 +226,15 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
                                                seq_num;
                }
 
+               *rows = sqlca.sqlerrd[2];
+
+               EXEC SQL COMMIT;
+
 #ifdef PTHREADS
                pthread_mutex_unlock(((OraParam *) (my->specParam))->dbLock);
        }
 #endif /* PTHREADS */
 
-       *rows = sqlca.sqlerrd[2];
-
        if (*rows > maxrows) {
                *rows = maxrows;
        }
@@ -240,7 +242,6 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
                val[i] = value[i];
        }
 
-       EXEC SQL COMMIT;
        return retVal;
 }
 
@@ -249,9 +250,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
        int retVal = 0;
        int i;
 
-       EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
-       EXEC SQL WHENEVER SQLERROR DO Param_rollback();
-
        EXEC SQL BEGIN DECLARE SECTION;
        int l_valid;
        int l_locked;
@@ -279,6 +277,9 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
        if (0 == pthread_mutex_lock(((OraParam *) (my->specParam))->dbLock)) {
 #endif /* PTHREADS */
 
+               EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
+               EXEC SQL WHENEVER SQLERROR DO Param_rollback(my);
+
                if (my->setup != NULL) {
                        EXEC SQL EXECUTE
                                BEGIN
@@ -345,13 +346,14 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
                                                seq_num;
                }
 
+               *rows = sqlca.sqlerrd[2];
+               EXEC SQL COMMIT;
+
 #ifdef PTHREADS
                pthread_mutex_unlock(((OraParam *) (my->specParam))->dbLock);
        }
 #endif /* PTHREADS */
 
-       *rows = sqlca.sqlerrd[2];
-
        if (*rows == 0) {
                EXEC SQL BEGIN DECLARE SECTION;
                unsigned long int intvalue[PARAM_MAX_ARRAY_LEN];
@@ -427,13 +429,14 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
                                                seq_num;
                        }
 
+                       *rows = sqlca.sqlerrd[2];
+                       EXEC SQL COMMIT;
+
 #ifdef PTHREADS
                        pthread_mutex_unlock(((OraParam *) (my->specParam))->dbLock);
                }
 #endif /* PTHREADS */
 
-               *rows = sqlca.sqlerrd[2];
-
                if (*rows > maxrows) {
                        *rows = maxrows;
                }
@@ -452,7 +455,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
                }
        }
 
-       EXEC SQL COMMIT;
        return retVal;
 }
 
@@ -511,9 +513,6 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned
 {
        int i;
 
-       EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
-       EXEC SQL WHENEVER SQLERROR DO Param_rollback();
-
        EXEC SQL BEGIN DECLARE SECTION;
        char sqlsetup[PARAM_MAX_NAME_LEN];
        char sqlname[PARAM_MAX_NAME_LEN];
@@ -540,6 +539,9 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned
        if (0 == pthread_mutex_lock(((OraParam *) (my->specParam))->dbLock)) {
 #endif /* PTHREADS */
 
+               EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
+               EXEC SQL WHENEVER SQLERROR DO Param_rollback(my);
+
                EXEC SQL EXECUTE
                        BEGIN
                                daq.daq_oper_interface.store_param_int ( :sqlsetup, :sqlname, :sqlidx, :value );
@@ -560,9 +562,6 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const
 {
        int i;
 
-       EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
-       EXEC SQL WHENEVER SQLERROR DO Param_rollback();
-
        EXEC SQL BEGIN DECLARE SECTION;
        char sqlsetup[PARAM_MAX_NAME_LEN];
        char sqlname[PARAM_MAX_NAME_LEN];
@@ -589,6 +588,9 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const
        if (0 == pthread_mutex_lock(((OraParam *) (my->specParam))->dbLock)) {
 #endif /* PTHREADS */
 
+               EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
+               EXEC SQL WHENEVER SQLERROR DO Param_rollback(my);
+
                EXEC SQL EXECUTE
                        BEGIN
                                daq.daq_oper_interface.store_param_string ( :sqlsetup, :sqlname, :sqlidx, :value );
@@ -622,8 +624,15 @@ static void Param_strerror(const Param *my, const char *strerror)
        }
 }
 
-static void Param_rollback()
+static void Param_rollback(const Param *my)
 {
-       EXEC SQL ROLLBACK;
+#ifdef PTHREADS
+       if (0 == pthread_mutex_lock(((OraParam *) (my->specParam))->dbLock)) {
+#endif /* PTHREADS */
+               EXEC SQL ROLLBACK;
+#ifdef PTHREADS
+               pthread_mutex_unlock(((OraParam *) (my->specParam))->dbLock);
+       }
+#endif /* PTHREADS */
 }