mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-23 04:55:18 +00:00
Fix race leading to crash when setting up dbus watches
Currently the virDBusAddWatch does virEventAddHandle(fd, flags, virDBusWatchCallback, watch, NULL); dbus_watch_set_data(watch, info, virDBusWatchFree); Unfortunately this is racy - since the event loop is in a different thread, the virDBusWatchCallback method may be run before we get to calling dbus_watch_set_data. We must reverse the order of these calls See https://bugzilla.redhat.com/show_bug.cgi?id=885445 Signed-off-by: Daniel P. Berrange <berrange@redhat.com> (cherry picked from commit 7d3a1c8bd1a2d376dfb5d7ee6a1bca8772ec2949)
This commit is contained in:
parent
51afa9a255
commit
3ba6892066
@ -206,15 +206,15 @@ static dbus_bool_t virDBusAddWatch(DBusWatch *watch,
|
||||
# else
|
||||
fd = dbus_watch_get_fd(watch);
|
||||
# endif
|
||||
dbus_watch_set_data(watch, info, virDBusWatchFree);
|
||||
info->bus = (DBusConnection *)data;
|
||||
info->watch = virEventAddHandle(fd, flags,
|
||||
virDBusWatchCallback,
|
||||
watch, NULL);
|
||||
if (info->watch < 0) {
|
||||
VIR_FREE(info);
|
||||
dbus_watch_set_data(watch, NULL, NULL);
|
||||
return 0;
|
||||
}
|
||||
dbus_watch_set_data(watch, info, virDBusWatchFree);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user