Commit 39d6816a authored by Max Kellermann's avatar Max Kellermann

neighbor/upnp: roll back changes if DoOpen() fails

parent 6517b2d2
...@@ -113,22 +113,37 @@ UdisksNeighborExplorer::DoOpen() ...@@ -113,22 +113,37 @@ UdisksNeighborExplorer::DoOpen()
auto &connection = GetConnection(); auto &connection = GetConnection();
/* this ugly try/catch cascade is only here because this
method has no RAII for this method - TODO: improve this */
try { try {
Error error; Error error;
dbus_bus_add_match(connection, udisks_neighbor_match, error); dbus_bus_add_match(connection, udisks_neighbor_match, error);
error.CheckThrow("DBus AddMatch error"); error.CheckThrow("DBus AddMatch error");
dbus_connection_add_filter(connection, try {
HandleMessage, this, dbus_connection_add_filter(connection,
nullptr); HandleMessage, this,
nullptr);
auto msg = Message::NewMethodCall(UDISKS2_INTERFACE,
UDISKS2_PATH, try {
DBUS_OM_INTERFACE, auto msg = Message::NewMethodCall(UDISKS2_INTERFACE,
"GetManagedObjects"); UDISKS2_PATH,
list_request.Send(connection, *msg.Get(), DBUS_OM_INTERFACE,
std::bind(&UdisksNeighborExplorer::OnListNotify, "GetManagedObjects");
this, std::placeholders::_1)); list_request.Send(connection, *msg.Get(),
std::bind(&UdisksNeighborExplorer::OnListNotify,
this, std::placeholders::_1));
} catch (...) {
dbus_connection_remove_filter(connection,
HandleMessage,
this);
throw;
}
} catch (...) {
dbus_bus_remove_match(connection,
udisks_neighbor_match, nullptr);
throw;
}
} catch (...) { } catch (...) {
dbus_glue.Destruct(); dbus_glue.Destruct();
throw; throw;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment