Clean up listening sockets on error
diff --git a/win/winvnc/ManagedListener.cxx b/win/winvnc/ManagedListener.cxx
index b80f5a1..9137238 100644
--- a/win/winvnc/ManagedListener.cxx
+++ b/win/winvnc/ManagedListener.cxx
@@ -107,7 +107,11 @@
for (iter = sockets.begin(); iter != sockets.end(); ++iter)
manager->addListener(*iter, server, addrChangeNotifier);
} catch (...) {
- // FIXME: Should unwind what we've added
+ std::list<network::TcpListener*>::iterator iter2;
+ for (iter2 = sockets.begin(); iter2 != iter; ++iter2)
+ manager->remListener(*iter2);
+ for (; iter2 != sockets.end(); ++iter2)
+ delete *iter;
sockets.clear();
throw;
}