Skip to contentSkip to conversation

malloc -> calloc and fix some memory leaks.

PATCH In review Yin Kangkai 2 participants 4 messages Aug 2, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 2/2 malloc -> calloc and fix some memory leaks.

From fd81bea16d3e1e93aebc8cb80ec16ae9c20c6e41 Mon Sep 17 00:00:00 2001
From: Yin Kangkai <[email protected]>
Date: Mon, 2 Aug 2010 11:22:49 +0800
Subject: [PATCH 2/2] malloc -> calloc and fix some memory leaks.

calloc so that we do not need to memset each of them.

---
 udev/udev-rules.c |   24 ++++++++++++++++--------
 udev/udevd.c      |    6 ++++--
 2 files changed, 20 insertions(+), 10 deletions(-)
udev/udev-rules.c +16 -8
index 6d32e73..072b31b 100644
@@ -1751,23 +1751,27 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
 	struct udev_list_entry *file_loop, *file_tmp;
 	struct token end_token;
 
-	rules = malloc(sizeof(struct udev_rules));
+	rules = calloc(1, sizeof(struct udev_rules));
 	if (rules = NULL)
 		return NULL;
-	memset(rules, 0x00, sizeof(struct udev_rules));
 	rules->udev = udev;
 	rules->resolve_names = resolve_names;
 	udev_list_init(&file_list);
 
 	/* init token array and string buffer */
-	rules->tokens = malloc(PREALLOC_TOKEN * sizeof(struct token));
-	if (rules->tokens = NULL)
+	rules->tokens = calloc(PREALLOC_TOKEN, sizeof(struct token));
+	if (rules->tokens = NULL) {
+		free(rules);
 		return NULL;
+	}
 	rules->token_max = PREALLOC_TOKEN;
 
-	rules->buf = malloc(PREALLOC_STRBUF);
-	if (rules->buf = NULL)
+	rules->buf = calloc(1, PREALLOC_STRBUF);
+	if (rules->buf = NULL) {
+		free(rules->tokens);
+		free(rules);
 		return NULL;
+	}
 	rules->buf_max = PREALLOC_STRBUF;
 	/* offset 0 is always '\0' */
 	rules->buf[0] = '\0';
@@ -1775,9 +1779,13 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
 	dbg(udev, "prealloc %zu bytes tokens (%u * %zu bytes), %zu bytes buffer\n",
 	    rules->token_max * sizeof(struct token), rules->token_max, sizeof(struct token), rules->buf_max);
 
-	rules->trie_nodes = malloc(PREALLOC_TRIE * sizeof(struct trie_node));
-	if (rules->trie_nodes = NULL)
+	rules->trie_nodes = calloc(PREALLOC_TRIE, sizeof(struct trie_node));
+	if (rules->trie_nodes = NULL) {
+		free(rules->buf);
+		free(rules->tokens);
+		free(rules);
 		return NULL;
+	}
 	rules->trie_nodes_max = PREALLOC_TRIE;
 	/* offset 0 is the trie root, with an empty string */
 	memset(rules->trie_nodes, 0x00, sizeof(struct trie_node));
udev/udevd.c +4 -2
index 95d4ad8..b882479 100644
@@ -227,8 +227,10 @@ static void worker_new(struct event *event)
 	udev_monitor_enable_receiving(worker_monitor);
 
 	worker = calloc(1, sizeof(struct worker));
-	if (worker = NULL)
+	if (worker = NULL) {
+		udev_monitor_unref(worker_monitor);
 		return;
+	}
 	/* worker + event reference */
 	worker->refcount = 2;
 	worker->udev = event->udev;
@@ -655,7 +657,7 @@ static int handle_inotify(struct udev *udev)
 	if ((ioctl(pfd[FD_INOTIFY].fd, FIONREAD, &nbytes) < 0) || (nbytes <= 0))
 		return 0;
 
-	buf = malloc(nbytes);
+	buf = calloc(1, nbytes);
 	if (buf = NULL) {
 		err(udev, "error getting buffer for inotify\n");
 		return -1;
Signature · 1 line
1.6.5
#1 lore raw
Quoted 6 lines · Yin Kangkai

From fd81bea16d3e1e93aebc8cb80ec16ae9c20c6e41 Mon Sep 17 00:00:00 2001
From: Yin Kangkai <[email protected]>
Date: Mon, 2 Aug 2010 11:22:49 +0800
Subject: [PATCH 2/2] malloc -> calloc and fix some memory leaks.

calloc so that we do not need to memset each of them.

Any reason to change things to calloc() where no memset() is done or needed?

Kay

#2 lore raw
In reply to Yin Kangkai
Quoted 9 lines · Kay Sievers
Quoted 6 lines · Yin Kangkai

From fd81bea16d3e1e93aebc8cb80ec16ae9c20c6e41 Mon Sep 17 00:00:00 2001
From: Yin Kangkai <[email protected]>
Date: Mon, 2 Aug 2010 11:22:49 +0800
Subject: [PATCH 2/2] malloc -> calloc and fix some memory leaks.

calloc so that we do not need to memset each of them.

Any reason to change things to calloc() where no memset() is done or needed?

I changed the malloc and memset pair of udev_rules allocation, and for consistence, I finished the others :)

Maybe it's only my personal taste that I like to memset memory once I malloc success. If this is not necessary, I can split the patch.

Thanks,
Kangkai

#3 lore raw
In reply to Yin Kangkai
Quoted 9 lines · Yin Kangkai
Quoted 8 lines · Kay Sievers
Quoted 6 lines · Yin Kangkai

From fd81bea16d3e1e93aebc8cb80ec16ae9c20c6e41 Mon Sep 17 00:00:00 2001
From: Yin Kangkai <[email protected]>
Date: Mon, 2 Aug 2010 11:22:49 +0800
Subject: [PATCH 2/2] malloc -> calloc and fix some memory leaks.

calloc so that we do not need to memset each of them.

Quoted 7 lines
Quoted 1 line

Any reason to change things to calloc() where no memset() is done or needed?

I changed the malloc and memset pair of udev_rules allocation, and for consistence, I finished the others :)

Maybe it's only my personal taste that I like to memset memory once I malloc success. If this is not necessary, I can split the patch.

Nah, I mean memset(), and calloc() is only necessary if the memory is read, and not always overwritten anyway by the next operation, like read() or similar. I don't think that needs to be 'fixed'.

Kay