From 0c49d967451c2cd15e8ff837602d2ef4ec9ba22f Mon Sep 17 00:00:00 2001 From: sailer Date: Mon, 31 Mar 2003 17:15:54 +0000 Subject: [PATCH] Totally serializing oracle access (which is absoltely not thread-safe). -- Benjamin Sailer --- allParam/ora/oraParam.pc | 59 +++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/allParam/ora/oraParam.pc b/allParam/ora/oraParam.pc index 7680adb..93699fa 100644 --- a/allParam/ora/oraParam.pc +++ b/allParam/ora/oraParam.pc @@ -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 */ } -- 2.43.0