summaryrefslogtreecommitdiffstats
path: root/daemons/dmeventd/dmeventd.c
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2012-03-02 23:01:10 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2012-03-02 23:01:10 +0000
commitedb42ac3672f5e634cd5ec5332129bc77dd0cc38 (patch)
tree9c9bc922df3481db15cd823d17db4380503648fd /daemons/dmeventd/dmeventd.c
parentf194dabb096f047a5ac4e64bdc5534488358ec33 (diff)
downloadlvm2-edb42ac3672f5e634cd5ec5332129bc77dd0cc38.tar.gz
lvm2-edb42ac3672f5e634cd5ec5332129bc77dd0cc38.tar.xz
lvm2-edb42ac3672f5e634cd5ec5332129bc77dd0cc38.zip
Code refactoring
Properly test for dm_asprintf result. Keep unlocking of mutex in the same function and do not spread lock and unlock over functions.
Diffstat (limited to 'daemons/dmeventd/dmeventd.c')
-rw-r--r--daemons/dmeventd/dmeventd.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index 1d70afca..456fa7da 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -1000,10 +1000,8 @@ static int _register_for_event(struct message_data *message_data)
almost as good as dead already... */
if (thread_new->events & DM_EVENT_TIMEOUT) {
ret = -_register_for_timeout(thread_new);
- if (ret) {
- _unlock_mutex();
- goto out;
- }
+ if (ret)
+ goto outth;
}
if (!(thread = _lookup_thread_status(message_data))) {
@@ -1029,6 +1027,7 @@ static int _register_for_event(struct message_data *message_data)
/* Or event # into events bitfield. */
thread->events |= message_data->events.field;
+ outth:
_unlock_mutex();
out:
@@ -1105,15 +1104,19 @@ static int _registered_device(struct message_data *message_data,
const char *id = message_data->id;
const char *dso = thread->dso_data->dso_name;
const char *dev = thread->device.uuid;
+ int r;
unsigned events = ((thread->status == DM_THREAD_RUNNING)
&& (thread->events)) ? thread->events : thread->
events | DM_EVENT_REGISTRATION_PENDING;
dm_free(msg->data);
- msg->size = dm_asprintf(&(msg->data), fmt, id, dso, dev, events);
+ if ((r = dm_asprintf(&(msg->data), fmt, id, dso, dev, events)) < 0) {
+ msg->size = 0;
+ return -ENOMEM;
+ }
- _unlock_mutex();
+ msg->size = (uint32_t) r;
return 0;
}
@@ -1146,6 +1149,7 @@ static int _want_registered_device(char *dso_name, char *device_uuid,
static int _get_registered_dev(struct message_data *message_data, int next)
{
struct thread_status *thread, *hit = NULL;
+ int ret = -ENOENT;
_lock_mutex();
@@ -1162,10 +1166,8 @@ static int _get_registered_dev(struct message_data *message_data, int next)
* If we got a registered device and want the next one ->
* fetch next conforming element off the list.
*/
- if (hit && !next) {
- _unlock_mutex();
- return _registered_device(message_data, hit);
- }
+ if (hit && !next)
+ goto reg;
if (!hit)
goto out;
@@ -1181,13 +1183,13 @@ static int _get_registered_dev(struct message_data *message_data, int next)
}
}
- _unlock_mutex();
- return _registered_device(message_data, hit);
+ reg:
+ ret = _registered_device(message_data, hit);
out:
_unlock_mutex();
-
- return -ENOENT;
+
+ return ret;
}
static int _get_registered_device(struct message_data *message_data)