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

Reply via email to