mirror of
git://sourceware.org/git/lvm2.git
synced 2024-10-28 03:27:58 +03:00
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.
This commit is contained in:
parent
f194dabb09
commit
edb42ac367
@ -1000,10 +1000,8 @@ static int _register_for_event(struct message_data *message_data)
|
|||||||
almost as good as dead already... */
|
almost as good as dead already... */
|
||||||
if (thread_new->events & DM_EVENT_TIMEOUT) {
|
if (thread_new->events & DM_EVENT_TIMEOUT) {
|
||||||
ret = -_register_for_timeout(thread_new);
|
ret = -_register_for_timeout(thread_new);
|
||||||
if (ret) {
|
if (ret)
|
||||||
_unlock_mutex();
|
goto outth;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(thread = _lookup_thread_status(message_data))) {
|
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. */
|
/* Or event # into events bitfield. */
|
||||||
thread->events |= message_data->events.field;
|
thread->events |= message_data->events.field;
|
||||||
|
|
||||||
|
outth:
|
||||||
_unlock_mutex();
|
_unlock_mutex();
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -1105,15 +1104,19 @@ static int _registered_device(struct message_data *message_data,
|
|||||||
const char *id = message_data->id;
|
const char *id = message_data->id;
|
||||||
const char *dso = thread->dso_data->dso_name;
|
const char *dso = thread->dso_data->dso_name;
|
||||||
const char *dev = thread->device.uuid;
|
const char *dev = thread->device.uuid;
|
||||||
|
int r;
|
||||||
unsigned events = ((thread->status == DM_THREAD_RUNNING)
|
unsigned events = ((thread->status == DM_THREAD_RUNNING)
|
||||||
&& (thread->events)) ? thread->events : thread->
|
&& (thread->events)) ? thread->events : thread->
|
||||||
events | DM_EVENT_REGISTRATION_PENDING;
|
events | DM_EVENT_REGISTRATION_PENDING;
|
||||||
|
|
||||||
dm_free(msg->data);
|
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;
|
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)
|
static int _get_registered_dev(struct message_data *message_data, int next)
|
||||||
{
|
{
|
||||||
struct thread_status *thread, *hit = NULL;
|
struct thread_status *thread, *hit = NULL;
|
||||||
|
int ret = -ENOENT;
|
||||||
|
|
||||||
_lock_mutex();
|
_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 ->
|
* If we got a registered device and want the next one ->
|
||||||
* fetch next conforming element off the list.
|
* fetch next conforming element off the list.
|
||||||
*/
|
*/
|
||||||
if (hit && !next) {
|
if (hit && !next)
|
||||||
_unlock_mutex();
|
goto reg;
|
||||||
return _registered_device(message_data, hit);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hit)
|
if (!hit)
|
||||||
goto out;
|
goto out;
|
||||||
@ -1181,13 +1183,13 @@ static int _get_registered_dev(struct message_data *message_data, int next)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_unlock_mutex();
|
reg:
|
||||||
return _registered_device(message_data, hit);
|
ret = _registered_device(message_data, hit);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
_unlock_mutex();
|
_unlock_mutex();
|
||||||
|
|
||||||
return -ENOENT;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _get_registered_device(struct message_data *message_data)
|
static int _get_registered_device(struct message_data *message_data)
|
||||||
|
Loading…
Reference in New Issue
Block a user