diff mbox

indexer: Free index_map resources when cleared

Message ID 1400894417-23657-1-git-send-email-sean.hefty@intel.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Hefty, Sean May 24, 2014, 1:20 a.m. UTC
From: Sean Hefty <sean.hefty@intel.com>

Free memory allocated for index map entries when they are no
longer in use.  To handle this, count the number of entries
stored by the index map item arrays and release the arrays when
no items are being tracked.

This reduces valgrind noise.

Problem reported by: Hannes Weisbach <hannes_weisbach@gmx.net>

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
---
 src/indexer.c |    5 +++++
 src/indexer.h |    1 +
 2 files changed, 6 insertions(+), 0 deletions(-)
diff mbox

Patch

diff --git a/src/indexer.c b/src/indexer.c
index c8e8bce..b9e400b 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -151,6 +151,7 @@  int idm_set(struct index_map *idm, int index, void *item)
 
 	entry = idm->array[idx_array_index(index)];
 	entry[idx_entry_index(index)] = item;
+	idm->count[idx_array_index(index)]++;
 	return index;
 }
 
@@ -162,5 +163,9 @@  void *idm_clear(struct index_map *idm, int index)
 	entry = idm->array[idx_array_index(index)];
 	item = entry[idx_entry_index(index)];
 	entry[idx_entry_index(index)] = NULL;
+	if (--idm->count[idx_array_index(index)] == 0) {
+		free(idm->array[idx_array_index(index)]);
+		idm->array[idx_array_index(index)] = NULL;
+	}
 	return item;
 }
diff --git a/src/indexer.h b/src/indexer.h
index 0c5f388..fc8eae2 100644
--- a/src/indexer.h
+++ b/src/indexer.h
@@ -85,6 +85,7 @@  static inline void *idx_at(struct indexer *idx, int index)
 struct index_map
 {
 	void **array[IDX_ARRAY_SIZE];
+	int count[IDX_ARRAY_SIZE];
 };
 
 int idm_set(struct index_map *idm, int index, void *item);