tests/immsv/implementer/test_saImmOiAugmentCcbInitialize.c | 98 ++++++++++---
1 files changed, 72 insertions(+), 26 deletions(-)
Make the counters in CcbAugment testcases thread-safe.
diff --git a/tests/immsv/implementer/test_saImmOiAugmentCcbInitialize.c
b/tests/immsv/implementer/test_saImmOiAugmentCcbInitialize.c
--- a/tests/immsv/implementer/test_saImmOiAugmentCcbInitialize.c
+++ b/tests/immsv/implementer/test_saImmOiAugmentCcbInitialize.c
@@ -45,9 +45,11 @@ static SaAisErrorT saImmOiCcbObjectModif
/* will be increased every time when any callback is called */
static int callbackCounter = 0;
+static pthread_mutex_t callbackCounterLock = PTHREAD_MUTEX_INITIALIZER;
/* count how many threads is running */
static int threadCounter = 0;
+static pthread_mutex_t threadCounterLock = PTHREAD_MUTEX_INITIALIZER;
static SaImmAttrValueT attrValues[] = { (SaImmAttrValueT)&rdnObj2, NULL };
static SaImmAttrValuesT_2 rdnAttrValue = {
@@ -115,12 +117,56 @@ static const SaImmOiCallbacksT_2 augCall
NULL
};
+static void increaseCallbackCounter() {
+ int rc = 0;
+ rc = pthread_mutex_lock(&callbackCounterLock);
+ safassert(rc, 0);
+ callbackCounter++;
+ rc = pthread_mutex_unlock(&callbackCounterLock);
+ safassert(rc, 0);
+}
+
+static void resetCallbackCounter() {
+ int rc = 0;
+ rc = pthread_mutex_lock(&callbackCounterLock);
+ safassert(rc, 0);
+ callbackCounter = 0;
+ rc = pthread_mutex_unlock(&callbackCounterLock);
+ safassert(rc, 0);
+}
+
+static void increaseThreadCounter() {
+ int rc = 0;
+ rc = pthread_mutex_lock(&threadCounterLock);
+ safassert(rc, 0);
+ threadCounter++;
+ rc = pthread_mutex_unlock(&threadCounterLock);
+ safassert(rc, 0);
+}
+
+static void decreaseThreadCounter() {
+ int rc = 0;
+ rc = pthread_mutex_lock(&threadCounterLock);
+ safassert(rc, 0);
+ threadCounter--;
+ rc = pthread_mutex_unlock(&threadCounterLock);
+ safassert(rc, 0);
+}
+
+static void resetThreadCounter() {
+ int rc = 0;
+ rc = pthread_mutex_lock(&threadCounterLock);
+ safassert(rc, 0);
+ threadCounter = 0;
+ rc = pthread_mutex_unlock(&threadCounterLock);
+ safassert(rc, 0);
+}
static void saImmOiCcbAbortCallback(SaImmOiHandleT immOiHandle,
SaImmOiCcbIdT ccbId)
{
TRACE_ENTER2();
- callbackCounter++;
+ increaseCallbackCounter();
TRACE_LEAVE2();
}
@@ -128,7 +174,7 @@ static void saImmOiCcbApplyCallback(SaIm
SaImmOiCcbIdT ccbId)
{
TRACE_ENTER2();
- callbackCounter++;
+ increaseCallbackCounter();
TRACE_LEAVE2();
}
@@ -140,7 +186,7 @@ static SaAisErrorT saImmOiCcbCompletedCa
SaImmAdminOwnerHandleT ownerHandle=0LL;
SaImmAttrValuesT_2** attributes=NULL;
TRACE_ENTER2();
- callbackCounter++;
+ increaseCallbackCounter();
if(testAugmentSafeReadInCompleted) {
globalRc = err = saImmOiAugmentCcbInitialize(immOiHandle, ccbId,
&ccbHandle, &ownerHandle);
if(err == SA_AIS_OK) {
@@ -165,7 +211,7 @@ static SaAisErrorT saImmOiCcbObjectCreat
const SaImmAttrValuesT_2 **attr)
{
TRACE_ENTER2("%llu, %s, %s\n", ccbId, className, parentName->value);
- callbackCounter++;
+ increaseCallbackCounter();
if(saImmOiCcbObjectCreateCallback_response != SA_AIS_OK)
safassert(saImmOiCcbSetErrorString(immOiHandle, ccbId, (SaStringT)"Set
error string in saImmOiCcbObjectCreateCallback"), SA_AIS_OK);
TRACE_LEAVE2();
@@ -177,7 +223,7 @@ static SaAisErrorT saImmOiCcbObjectDelet
const SaNameT *objectName)
{
TRACE_ENTER2("%llu, %s\n", ccbId, objectName->value);
- callbackCounter++;
+ increaseCallbackCounter();
if(saImmOiCcbObjectDeleteCallback_response != SA_AIS_OK)
safassert(saImmOiCcbSetErrorString(immOiHandle, ccbId, (SaStringT)"Set
error string in saImmOiCcbObjectDeleteCallback"), SA_AIS_OK);
TRACE_LEAVE2();
@@ -190,7 +236,7 @@ static SaAisErrorT saImmOiCcbObjectModif
const SaImmAttrModificationT_2 **attrMods)
{
TRACE_ENTER2("%llu, %s\n", ccbId, objectName->value);
- callbackCounter++;
+ increaseCallbackCounter();
if(saImmOiCcbObjectModifyCallback_response != SA_AIS_OK)
safassert(saImmOiCcbSetErrorString(immOiHandle, ccbId, (SaStringT)"Set
error string in saImmOiCcbObjectModifyCallback"), SA_AIS_OK);
TRACE_LEAVE2();
@@ -208,7 +254,7 @@ static SaAisErrorT saImmOiAugCcbObjectCr
SaImmAdminOwnerHandleT ownerHandle;
TRACE_ENTER2("%llu, %s, %s\n", ccbId, className, parentName->value);
- callbackCounter++;
+ increaseCallbackCounter();
safassert(saImmOiAugmentCcbInitialize(immOiHandle, ccbId, &ccbHandle,
&ownerHandle), SA_AIS_OK);
if((rc = saImmOmCcbObjectCreate_2(ccbHandle, className, parentName, (const
SaImmAttrValuesT_2 **)createAttrValues)) == SA_AIS_OK)
rc = saImmOmCcbApply(ccbHandle);
@@ -226,7 +272,7 @@ static SaAisErrorT saImmOiAugCcbObjectDe
const SaNameT *objectNames[] = { &rdnObj2, NULL };
TRACE_ENTER2("%llu, %s\n", ccbId, objectName->value);
- callbackCounter++;
+ increaseCallbackCounter();
safassert(saImmOiAugmentCcbInitialize(immOiHandle, ccbId, &ccbHandle,
&ownerHandle), SA_AIS_OK);
if(useAdminOwner)
safassert(saImmOmAdminOwnerSet(ownerHandle, objectNames, SA_IMM_ONE),
SA_AIS_OK);
@@ -247,7 +293,7 @@ static SaAisErrorT saImmOiAugCcbObjectMo
const SaNameT *objectNames[] = { &rdnObj2, NULL };
TRACE_ENTER2("%llu, %s\n", ccbId, objectName->value);
- callbackCounter++;
+ increaseCallbackCounter();
safassert(saImmOiAugmentCcbInitialize(immOiHandle, ccbId, &ccbHandle,
&ownerHandle), SA_AIS_OK);
if(useAdminOwner)
safassert(saImmOmAdminOwnerSet(ownerHandle, objectNames, SA_IMM_ONE),
SA_AIS_OK);
@@ -323,7 +369,7 @@ static void *immOiObjectDispatchThread(v
TRACE_ENTER();
- threadCounter++;
+ increaseThreadCounter();
safassert(saImmOiInitialize_2(&handle, immArg->callbacks, &immVersion),
SA_AIS_OK);
safassert(saImmOiImplementerSet(handle, implementerName), SA_AIS_OK);
@@ -360,7 +406,7 @@ static void *immOiObjectDispatchThread(v
safassert(saImmOiImplementerClear(handle), SA_AIS_OK);
safassert(saImmOiFinalize(handle), SA_AIS_OK);
- threadCounter--;
+ decreaseThreadCounter();
TRACE_LEAVE();
@@ -378,7 +424,7 @@ static void *immOiClassDispatchThread(vo
TRACE_ENTER();
- threadCounter++;
+ increaseThreadCounter();
safassert(saImmOiInitialize_2(&handle, immArg->callbacks, &immVersion),
SA_AIS_OK);
safassert(saImmOiImplementerSet(handle, implementerName), SA_AIS_OK);
@@ -408,7 +454,7 @@ static void *immOiClassDispatchThread(vo
safassert(saImmOiImplementerClear(handle), SA_AIS_OK);
safassert(saImmOiFinalize(handle), SA_AIS_OK);
- threadCounter--;
+ decreaseThreadCounter();
TRACE_LEAVE();
@@ -435,7 +481,7 @@ static void saImmOiCcbAugmentInitialize_
arg.callbacks = (SaImmOiCallbacksT_2 *)&augCallbacks;
arg.implementerName = (SaImmOiImplementerNameT)__FUNCTION__;
classDispatchThreadIsSet = 0;
- threadCounter = 0;
+ resetThreadCounter();
assert(pthread_create(&threadid, NULL, immOiClassDispatchThread, (void
*)&arg) == 0);
while(!classDispatchThreadIsSet)
usleep(500);
@@ -443,13 +489,13 @@ static void saImmOiCcbAugmentInitialize_
safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
/* create objects */
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = config_object_create(ccbHandle, NULL, &rdnObj1)) != SA_AIS_OK)
goto done;
assert(callbackCounter == 1);
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = config_object_modify(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -463,7 +509,7 @@ static void saImmOiCcbAugmentInitialize_
assert(callbackCounter == 3);
/* Delete objects */
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = saImmOmCcbObjectDelete(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -515,7 +561,7 @@ static void saImmOiCcbAugmentInitialize_
arg.callbacks = (SaImmOiCallbacksT_2 *)&augCallbacks;
arg.implementerName = (SaImmOiImplementerNameT)__FUNCTION__;
objectDispatchThreadIsSet = 0;
- threadCounter = 0;
+ resetThreadCounter();
assert(pthread_create(&threadid, NULL, immOiObjectDispatchThread, (void
*)&arg) == 0);
while(!objectDispatchThreadIsSet)
usleep(500);
@@ -525,7 +571,7 @@ static void saImmOiCcbAugmentInitialize_
safassert(saImmOmAdminOwnerSet(ownerHandle, objectNames, SA_IMM_ONE),
SA_AIS_OK);
safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = config_object_modify(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -540,7 +586,7 @@ static void saImmOiCcbAugmentInitialize_
usleep(500);
assert(callbackCounter == 3);
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = saImmOmCcbObjectDelete(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -597,7 +643,7 @@ static void saImmOiCcbAugmentInitialize_
arg[1].callbacks = (SaImmOiCallbacksT_2 *)&callbacks;
arg[1].implementerName = (SaImmOiImplementerNameT)"TestImplementer2";
- threadCounter = 0;
+ resetThreadCounter();
objectDispatchThreadIsSet = 0;
assert(pthread_create(&threadid1, NULL, immOiObjectDispatchThread, (void
*)&(arg[0])) == 0);
while(!objectDispatchThreadIsSet)
@@ -613,7 +659,7 @@ static void saImmOiCcbAugmentInitialize_
safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
/* Modify objects */
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = config_object_modify(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -628,7 +674,7 @@ static void saImmOiCcbAugmentInitialize_
assert(callbackCounter == 6);
/* Delete objects */
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = saImmOmCcbObjectDelete(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -684,7 +730,7 @@ static void saImmOiCcbAugmentInitialize_
arg[1].callbacks = (SaImmOiCallbacksT_2 *)&callbacks;
arg[1].implementerName = (SaImmOiImplementerNameT)"TestImplementer2";
- threadCounter = 0;
+ resetThreadCounter();
objectDispatchThreadIsSet = 0;
assert(pthread_create(&threadid1, NULL, immOiObjectDispatchThread, (void
*)&(arg[0])) == 0);
while(!objectDispatchThreadIsSet)
@@ -702,7 +748,7 @@ static void saImmOiCcbAugmentInitialize_
useAdminOwner = 1;
/* Modify objects */
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = config_object_modify(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
@@ -717,7 +763,7 @@ static void saImmOiCcbAugmentInitialize_
assert(callbackCounter == 6);
/* Delete objects */
- callbackCounter = 0; /* reset callback counter */
+ resetCallbackCounter();
if ((rc = saImmOmCcbObjectDelete(ccbHandle, &rdnObj1)) != SA_AIS_OK)
goto done;
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel