]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[3461] Corrected valgrind errors in the util library.
authorMarcin Siodelski <marcin@isc.org>
Wed, 16 Jul 2014 13:02:06 +0000 (15:02 +0200)
committerMarcin Siodelski <marcin@isc.org>
Wed, 16 Jul 2014 13:02:06 +0000 (15:02 +0200)
src/lib/util/io/fd_share.cc
src/lib/util/tests/memory_segment_local_unittest.cc

index 866644131a0821cd8ee26031cb7927eb6cd976a9..bae9e2c0960910b7be94aaddd48544fc82b5af1c 100644 (file)
@@ -111,7 +111,9 @@ recv_fd(const int sock) {
     // one returned previously, even if that one is not closed yet. So,
     // we just re-number every one we get, so they are unique.
     int new_fd(dup(fd));
-    int close_error(close(fd));
+    // Only call close() if the descriptor is valid. Otherwise return
+    // an error.
+    int close_error(fd >=0 ? close(fd) : -1);
     if (close_error == -1 || new_fd == -1) {
         // We need to return an error, because something failed. But in case
         // it was the previous close, we at least try to close the duped FD.
index 5176c8874c7dbc3af9e808503db8507640495f0d..2f1401199b58e08d0a3297beadc1739bcd34fb98 100644 (file)
@@ -59,7 +59,12 @@ TEST(MemorySegmentLocal, TestLocal) {
 TEST(MemorySegmentLocal, TestTooMuchMemory) {
     auto_ptr<MemorySegment> segment(new MemorySegmentLocal());
 
-    EXPECT_THROW(segment->allocate(ULONG_MAX), bad_alloc);
+    // Although it should be perfectly fine to use the ULONG_MAX
+    // instead of LONG_MAX as the size_t value should be unsigned,
+    // Valgrind appears to be using the signed value and hence the
+    // maximum positive value is LONG_MAX for Valgrind. But, this
+    // should be sufficient to test the "too much memory" conditions.
+    EXPECT_THROW(segment->allocate(LONG_MAX), bad_alloc);
 }
 
 TEST(MemorySegmentLocal, TestBadDeallocate) {