summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2015-10-22 12:38:26 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2015-10-22 22:34:30 +0200
commit15dbd4b56a65dba2f19bb1685529731faa9894c6 (patch)
tree1a0b2407a5e61c1e6c564e735a67ec4b9c604ca0
parente2ea2a81476495f494915774c46c0b3c139d1c3f (diff)
downloadlvm2-15dbd4b56a65dba2f19bb1685529731faa9894c6.tar.gz
dmeventd: minimize locking time for get_imeout
Don't hold lock when creating message (allocating memory). Thread cannot dissapear as it's only the same thread which may clean it.
-rw-r--r--daemons/dmeventd/dmeventd.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index 2f5fe6747..26e611d19 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -1292,18 +1292,18 @@ static int _get_timeout(struct message_data *message_data)
struct thread_status *thread;
struct dm_event_daemon_message *msg = message_data->msg;
- dm_free(msg->data);
-
_lock_mutex();
- if ((thread = _lookup_thread_status(message_data))) {
- msg->size = dm_asprintf(&(msg->data), "%s %" PRIu32,
- message_data->id, thread->timeout);
- } else
- msg->data = NULL;
-
+ thread = _lookup_thread_status(message_data);
_unlock_mutex();
- return thread ? 0 : -ENODEV;
+ if (!thread)
+ return -ENODEV;
+
+ dm_free(msg->data);
+ msg->size = dm_asprintf(&(msg->data), "%s %" PRIu32,
+ message_data->id, thread->timeout);
+
+ return (msg->data && msg->size) ? 0 : -ENOMEM;
}
/* Open fifos used for client communication. */