fix a memory leak in osNumaMask
authorKubo Kovac <kuko@fb.com>
Mon, 22 May 2017 15:51:55 +0000 (11:51 -0400)
committerBen Gamari <ben@smart-cactus.org>
Mon, 22 May 2017 16:40:35 +0000 (12:40 -0400)
got an error when using asan:
```
==1866689==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x10640568 in malloc ??:?
    #1 0x154d867e in numa_bitmask_alloc .../numactl-2.0.8/libnuma_nosymve r.c:204
    #2 0x154d867e in numa_allocate_nodemask .../numactl-2.0.8/libnuma_nosymve r.c:724
    #3 0x154d867e in numa_get_mems_allowed .../numactl-2.0.8/libnuma_nosymve r.c:1141
    #4 0x10b54a45 in osNumaMask ...ghc-8.0.2/rts/posix/OSMem.c:59 8
```

Test Plan: compile, validate

Reviewers: simonmar, niteria, austin, bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3537

rts/posix/OSMem.c

index 330da21..6ccd65a 100644 (file)
@@ -601,7 +601,9 @@ uint64_t osNumaMask(void)
     if (osNumaNodes() > sizeof(StgWord)*8) {
         barf("osNumaMask: too many NUMA nodes (%d)", osNumaNodes());
     }
-    return mask->maskp[0];
+    uint64_t r = mask->maskp[0];
+    numa_bitmask_free(mask);
+    return r;
 #else
     return 1;
 #endif