summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-04-18 13:29:38 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2014-04-18 16:38:48 +0200
commit08e7de986cf2b4f8a05d6f1a7e996e4f298bfd1a (patch)
treea371ad9fe55e1cd8b575fcddb1acc3d21b3e084d
parent0e05e1cf6cb9323cc48ff38adc781f22a3c7d172 (diff)
downloadlvm2-08e7de986cf2b4f8a05d6f1a7e996e4f298bfd1a.tar.gz
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)
-rw-r--r--daemons/dmeventd/dmeventd.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index af7a2e410..906f7317c 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,