MLK: Clean 5 stack unittest valgrind leak reports 29/22729/20
authorMats Wichmann <mats@linux.com>
Sat, 7 Oct 2017 14:47:32 +0000 (08:47 -0600)
committerMats Wichmann <mats@linux.com>
Sat, 24 Feb 2018 00:40:07 +0000 (00:40 +0000)
These are in the test code only.

1/2. The test TEST(LinksPayloadArray, BuildCollectionLinksPayloadArray)
has multiple allocations that are not freed.

  736 bytes in 1 blocks are definitely lost in loss record 962 of 988
  alloc ~3019:  CAGetNetworkInformation(&info, &size);
  added OICFree(info); at function end

  184 bytes in 1 blocks are definitely lost in loss record 922 of 988
  allocated ~3015: OCDevAddr* devAddr = (OCDevAddr*)OICCalloc(1, sizeof(OCDevAddr));
  added OICFree(devAddr); at function end

3. Still in TEST(LinksPayloadArray, BuildCollectionLinksPayloadArray),
  134 bytes in 4 blocks are definitely lost in loss record 901 of 988
  alloc ~3125:   ASSERT_TRUE(OCRepPayloadGetPropString(epsMap[k], OC_RSRVD_ENDPOINT, &outUri));
  outUri is allocated, tested, not freed.

  Added an OICFree at the end of the loop

4/5. two calls to OCRepPayloadGetPropObject happen in a pair of loops;
freeing is outside the loops which means that iterations other than
the last have their allocation lost, not freed.

  252 (48 direct, 204 indirect) bytes in 1 blocks are definitely lost in loss record 929 of 988
  115 (48 direct, 67 indirect) bytes in 1 blocks are definitely lost in loss record 892 of 988

Note for reviewers: some other leak reports for this
unittest were traced to flaws in the stack code, and
were split off into separate commits as a result, since
"approve change to stack" might be quite different than
"approve change to unittest".  See:
https://gerrit.iotivity.org/gerrit/23847
https://gerrit.iotivity.org/gerrit/23849

With the items in this change and the two referenced change,
the 12 "definitely lost" leak reports for the stack
unittest are reduced to two.

Change-Id: I6f1c74eedc6e9be40173bde8c1f321e84dbc83f0
Signed-off-by: Mats Wichmann <mats@linux.com>
resource/csdk/stack/test/stacktests.cpp

index 9a0c30f..cca69c2 100644 (file)
@@ -3082,11 +3082,11 @@ TEST(LinksPayloadArray, BuildCollectionLinksPayloadArray)
 #endif
 #endif
         }
+        OCRepPayloadDestroy(policyMap);
         OCRepPayloadDestroy(linksMap[i]);
     }
 
     OICFree(linksMap);
-    OCRepPayloadDestroy(policyMap);
     OCRepPayloadDestroy(collectionPayload);
 
     //check for OCF1.0 logic
@@ -3138,6 +3138,7 @@ TEST(LinksPayloadArray, BuildCollectionLinksPayloadArray)
                 OIC_LOG_V(ERROR, TAG, "ep uri = %s \n", outUri);
             }
 
+            OICFree(outUri);
             OCRepPayloadDestroy(epsMap[k]);
         }
 
@@ -3158,11 +3159,13 @@ TEST(LinksPayloadArray, BuildCollectionLinksPayloadArray)
 #endif
 
         OCRepPayloadDestroy(linksMap[i]);
+        OCRepPayloadDestroy(policyMap);
         OICFree(epsMap);
     }
 
     OICFree(linksMap);
-    OCRepPayloadDestroy(policyMap);
+    OICFree(info);
+    OICFree(devAddr);
     OCRepPayloadDestroy(collectionPayload);
 
     EXPECT_EQ(OC_STACK_OK, OCStop());