Hi Hung, Reviewed the code. Ack from me.
Best regards, Zoran -----Original Message----- From: Hung Nguyen [mailto:[email protected]] Sent: Friday, May 06, 2016 8:06 AM To: Zoran Milinkovic; [email protected] Cc: [email protected] Subject: [PATCH 1 of 1] imm: Make the counters in CcbAugment testcases thread-safe [#1803] 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; ------------------------------------------------------------------------------ Mobile security can be enabling, not merely restricting. Employees who bring their own devices (BYOD) to work are irked by the imposition of MDM restrictions. Mobile Device Manager Plus allows you to control only the apps on BYO-devices by containerizing them, leaving personal data untouched! https://ad.doubleclick.net/ddm/clk/304595813;131938128;j _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
