[lvm-devel] master - dmeventd: check for list size within lock

Zdenek Kabelac zkabelac at fedoraproject.org
Fri Apr 18 14:55:00 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=08e7de986cf2b4f8a05d6f1a7e996e4f298bfd1a
Commit:        08e7de986cf2b4f8a05d6f1a7e996e4f298bfd1a
Parent:        0e05e1cf6cb9323cc48ff38adc781f22a3c7d172
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Apr 18 13:29:38 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Apr 18 16:38:48 2014 +0200

dmeventd: check for list size within lock

Move check for _thread_registry list size behind mutex.
Use alloca() instead of buffer[count] (they are the same anyway)
---
 daemons/dmeventd/dmeventd.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index af7a2e4..906f731 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -464,20 +464,17 @@ static int _get_status(struct message_data *message_data)
 {
 	struct dm_event_daemon_message *msg = message_data->msg;
 	struct thread_status *thread;
-	int i, j;
-	int ret = -1;
-	int count = dm_list_size(&_thread_registry);
+	int i = 0, j;
+	int ret = -ENOMEM;
+	int count;
 	int size = 0, current;
-	char *buffers[count];
+	size_t len;
+	char **buffers;
 	char *message;
 
-	dm_free(msg->data);
-
-	for (i = 0; i < count; ++i)
-		buffers[i] = NULL;
-
-	i = 0;
 	_lock_mutex();
+	count = dm_list_size(&_thread_registry);
+	buffers = alloca(sizeof(char*) * count);
 	dm_list_iterate_items(thread, &_thread_registry) {
 		if ((current = dm_asprintf(buffers + i, "0:%d %s %s %u %" PRIu32 ";",
 					   i, thread->dso_data->dso_name,




More information about the lvm-devel mailing list