-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
 
 #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;
        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;
        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
                                                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;
        }
                val[i] = value[i];
        }
 
-       EXEC SQL COMMIT;
        return retVal;
 }
 
        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;
        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
                                                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];
                                                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;
                }
                }
        }
 
-       EXEC SQL COMMIT;
        return retVal;
 }
 
 {
        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];
        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 );
 {
        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];
        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 );
        }
 }
 
-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 */
 }