]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
lock profiling: fix memory leak
authorVictor Julien <victor@inliniac.net>
Tue, 7 Jan 2014 10:56:23 +0000 (11:56 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 27 Feb 2014 13:27:44 +0000 (14:27 +0100)
If lock profiling was compiled in, but disabled in the config a
serious memory leak condition was triggered.

Valgrind output:

==11169== 9,091,248 bytes in 189,401 blocks are definitely lost in loss record 564 of 564
==11169==    at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11169==    by 0xABC44C: LockRecordAdd (util-profiling-locks.c:112)
==11169==    by 0xABC950: SCProfilingAddPacketLocks (util-profiling-locks.c:141)
==11169==    by 0xA04CD5: TmThreadsSlotVarRun (tm-threads.c:562)
==11169==    by 0x958793: TmThreadsSlotProcessPkt (tm-threads.h:142)
==11169==    by 0x9599C3: PcapFileCallbackLoop (source-pcap-file.c:172)
==11169==    by 0x56FC130: ??? (in /usr/lib/x86_64-linux-gnu/libpcap.so.1.4.0)
==11169==    by 0x959D24: ReceivePcapFileLoop (source-pcap-file.c:210)
==11169==    by 0xA05B9E: TmThreadsSlotPktAcqLoop (tm-threads.c:703)
==11169==    by 0x6155F6D: start_thread (pthread_create.c:311)
==11169==    by 0x6E399CC: clone (clone.S:113)

src/util-profiling-locks.c

index b88e27dd266179c540b47263a333e3aa53ccf23b..5be04488998505dbc866ae65eb6a9ca10150d889 100644 (file)
@@ -136,6 +136,10 @@ void LockRecordAdd(ProfilingLock *l) {
 /** \param p void ptr to Packet struct */
 void SCProfilingAddPacketLocks(void *p) {
     int i;
+
+    if (profiling_locks_enabled == 0)
+        return;
+
     for (i = 0; i < locks_idx; i++) {
         pthread_mutex_lock(&lock_records_mutex);
         LockRecordAdd(&locks[i]);