Both immomtest and immoitest works great and produce zero valgrind warnings with the three patches 549, 550 and 552!
Great stuff! /Hans On 08/27/2013 01:57 PM, Zoran Milinkovic wrote: > tests/immsv/common/immtest.c | 4 ++++ > tests/immsv/implementer/test_SaImmOiRtAttrUpdateCallbackT.c | 2 +- > tests/immsv/implementer/test_cleanup.c | 3 ++- > tests/immsv/management/test_cleanup.c | 3 ++- > tests/immsv/management/test_saImmOmAdminOwnerFinalize.c | 1 + > tests/immsv/management/test_saImmOmInitialize.c | 1 + > tests/immsv/management/test_saImmOmThreadInterference.c | 10 +++++++--- > 7 files changed, 18 insertions(+), 6 deletions(-) > > > Cleanup IMM test code and fix memory problems reported by valgrind. > > diff --git a/tests/immsv/common/immtest.c b/tests/immsv/common/immtest.c > --- a/tests/immsv/common/immtest.c > +++ b/tests/immsv/common/immtest.c > @@ -18,6 +18,7 @@ > #include <stdlib.h> > #include <sys/time.h> > #include <unistd.h> > +#include <pthread.h> > #include "immtest.h" > > const SaVersionT constImmVersion = {'A', 0x02, 0x0c}; > @@ -68,6 +69,9 @@ int main(int argc, char **argv) > if(test_cleanup) > test_cleanup(); > > + /* Added pthread_exit() to remove dlopen@@GLIBC leak from valgrind */ > + pthread_exit(NULL); > + > return rc; > } > > diff --git a/tests/immsv/implementer/test_SaImmOiRtAttrUpdateCallbackT.c > b/tests/immsv/implementer/test_SaImmOiRtAttrUpdateCallbackT.c > --- a/tests/immsv/implementer/test_SaImmOiRtAttrUpdateCallbackT.c > +++ b/tests/immsv/implementer/test_SaImmOiRtAttrUpdateCallbackT.c > @@ -138,9 +138,9 @@ static void *test_saImmOmAccessorGet_2(v > safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, > &immVersion), SA_AIS_OK); > safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle), > SA_AIS_OK); > safassert(saImmOmAccessorGet_2(accessorHandle, dn, attributeNames, > &attributes), SA_AIS_OK); > - safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK); > assert(attributes[0]->attrValueType == SA_IMM_ATTR_SAINT32T); > assert(*((SaInt32T*) attributes[0]->attrValues[0]) == int1Value); > + safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK); > > TRACE_LEAVE(); > return NULL; > diff --git a/tests/immsv/implementer/test_cleanup.c > b/tests/immsv/implementer/test_cleanup.c > --- a/tests/immsv/implementer/test_cleanup.c > +++ b/tests/immsv/implementer/test_cleanup.c > @@ -64,13 +64,14 @@ static void cleanup() { > > /* Delete objects */ > int len; > - SaNameT objectName; > + SaNameT objectName = {0}; > SaNameT *objectNames[2] = { &objectName, NULL }; > obj = objects; > while(*obj) { > len = strlen(*obj); > objectName.length = (len > SA_MAX_NAME_LENGTH) ? > SA_MAX_NAME_LENGTH : len; > strncpy((char *)objectName.value, *obj, objectName.length); > + objectName.value[objectName.length] = 0; > > rc = saImmOmAdminOwnerSet(ownerHandle, (const SaNameT > **)objectNames, SA_IMM_ONE); > if(rc == SA_AIS_ERR_NOT_EXIST) { > diff --git a/tests/immsv/management/test_cleanup.c > b/tests/immsv/management/test_cleanup.c > --- a/tests/immsv/management/test_cleanup.c > +++ b/tests/immsv/management/test_cleanup.c > @@ -70,13 +70,14 @@ static void cleanup() { > > /* Delete objects */ > int len; > - SaNameT objectName; > + SaNameT objectName = {0}; > SaNameT *objectNames[2] = { &objectName, NULL }; > obj = objects; > while(*obj) { > len = strlen(*obj); > objectName.length = (len > SA_MAX_NAME_LENGTH) ? > SA_MAX_NAME_LENGTH : len; > strncpy((char *)objectName.value, *obj, objectName.length); > + objectName.value[objectName.length] = 0; > > rc = saImmOmAdminOwnerSet(ownerHandle, (const SaNameT > **)objectNames, SA_IMM_ONE); > if(rc == SA_AIS_ERR_NOT_EXIST) { > diff --git a/tests/immsv/management/test_saImmOmAdminOwnerFinalize.c > b/tests/immsv/management/test_saImmOmAdminOwnerFinalize.c > --- a/tests/immsv/management/test_saImmOmAdminOwnerFinalize.c > +++ b/tests/immsv/management/test_saImmOmAdminOwnerFinalize.c > @@ -74,4 +74,5 @@ void saImmOmAdminOwnerFinalize_03(void) > > /* Cleanup */ > safassert(saImmOmAdminOwnerFinalize(rudeGuyHandle), SA_AIS_OK); > + safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK); > } > diff --git a/tests/immsv/management/test_saImmOmInitialize.c > b/tests/immsv/management/test_saImmOmInitialize.c > --- a/tests/immsv/management/test_saImmOmInitialize.c > +++ b/tests/immsv/management/test_saImmOmInitialize.c > @@ -243,6 +243,7 @@ void saImmOmInitialize_10(void) > > test_validate(rc, SA_AIS_OK); > > + safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK); > } > > void saImmOmInitialize_11(void) > diff --git a/tests/immsv/management/test_saImmOmThreadInterference.c > b/tests/immsv/management/test_saImmOmThreadInterference.c > --- a/tests/immsv/management/test_saImmOmThreadInterference.c > +++ b/tests/immsv/management/test_saImmOmThreadInterference.c > @@ -88,7 +88,7 @@ void saImmOmThreadInterference_01(void) > SaImmAdminOwnerHandleT ownerHandle; > SaImmSearchHandleT searchHandle; > SaImmCcbHandleT ccbHandle; > - pthread_t threadid; > + pthread_t threadid1, threadid2; > SaAisErrorT rc; > SaImmAttrDefinitionT_2 attrDef = { "rdn", SA_IMM_ATTR_SASTRINGT, > SA_IMM_ATTR_RDN | SA_IMM_ATTR_CONFIG, NULL }; > const SaImmAttrDefinitionT_2 *attrDefs[2] = { &attrDef, NULL }; > @@ -123,7 +123,7 @@ void saImmOmThreadInterference_01(void) > safassert(saImmOiInitialize_2(&immOiHandle, &immOiCallbacks, > &immVersion), SA_AIS_OK); > safassert(saImmOiImplementerSet(immOiHandle, implementerName), > SA_AIS_OK); > safassert(saImmOiObjectImplementerSet(immOiHandle, &objectName, > SA_IMM_ONE), SA_AIS_OK); > - assert(!pthread_create(&threadid, NULL, implementer_thread, > &immOiHandle)); > + assert(!pthread_create(&threadid1, NULL, implementer_thread, > &immOiHandle)); > > while(!isReady) > usleep(100); > @@ -132,7 +132,7 @@ void saImmOmThreadInterference_01(void) > isReady = 0; > isOmDone = 0; > isAdminOperDone = 0; > - assert(!pthread_create(&threadid, NULL, lockomhandle_thread, > &ownerHandle)); > + assert(!pthread_create(&threadid2, NULL, lockomhandle_thread, > &ownerHandle)); > > while(!isReady) > usleep(100); > @@ -166,6 +166,10 @@ done: > safassert(saImmOiImplementerClear(immOiHandle), SA_AIS_OK); > safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK); > > + /* Use pthread_detach() to remove pthread_create@@GLIBC leak from > valgrind */ > + pthread_detach(threadid1); > + pthread_detach(threadid2); > + > while(!isOiDone) > usleep(200); > > > ------------------------------------------------------------------------------ > Introducing Performance Central, a new site from SourceForge and > AppDynamics. Performance Central is your source for news, insights, > analysis and resources for efficient Application Performance Management. > Visit us today! > http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk > _______________________________________________ > Opensaf-devel mailing list > Opensaf-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/opensaf-devel > > ------------------------------------------------------------------------------ Introducing Performance Central, a new site from SourceForge and AppDynamics. Performance Central is your source for news, insights, analysis and resources for efficient Application Performance Management. Visit us today! http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel