aboutsummaryrefslogtreecommitdiffstats
path: root/win/winvnc
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2015-09-29 15:40:49 +0200
committerPierre Ossman <ossman@cendio.se>2015-09-29 15:40:49 +0200
commitf7aa3f9bd315ba52d6ee1e7236a580102c8d20b8 (patch)
tree45d4adcd35e59ec11233d1f6a65b78fad811701f /win/winvnc
parent7ebce759122eeda383d7d299ee577c75c0f9ac6e (diff)
downloadtigervnc-f7aa3f9bd315ba52d6ee1e7236a580102c8d20b8.tar.gz
tigervnc-f7aa3f9bd315ba52d6ee1e7236a580102c8d20b8.zip
Return TcpListener pointers rather than objects
It is easier to control object life time and avoid magical socket duplication by having a single TcpListener object to pass around. We have to be more careful about deleting the object though.
Diffstat (limited to 'win/winvnc')
-rw-r--r--win/winvnc/ManagedListener.cxx16
-rw-r--r--win/winvnc/ManagedListener.h2
2 files changed, 9 insertions, 9 deletions
diff --git a/win/winvnc/ManagedListener.cxx b/win/winvnc/ManagedListener.cxx
index 25d8dc0f..b80f5a16 100644
--- a/win/winvnc/ManagedListener.cxx
+++ b/win/winvnc/ManagedListener.cxx
@@ -31,9 +31,9 @@ ManagedListener::ManagedListener(SocketManager* mgr)
ManagedListener::~ManagedListener() {
if (!sockets.empty()) {
- std::list<network::TcpListener>::iterator iter;
+ std::list<network::TcpListener*>::iterator iter;
for (iter = sockets.begin(); iter != sockets.end(); ++iter)
- manager->remListener(&*iter);
+ manager->remListener(*iter);
sockets.clear();
}
delete filter;
@@ -62,9 +62,9 @@ void ManagedListener::setFilter(const char* filterStr) {
delete filter;
filter = new network::TcpFilter(filterStr);
if (!sockets.empty() && !localOnly) {
- std::list<network::TcpListener>::iterator iter;
+ std::list<network::TcpListener*>::iterator iter;
for (iter = sockets.begin(); iter != sockets.end(); ++iter)
- iter->setFilter(filter);
+ (*iter)->setFilter(filter);
}
}
@@ -80,10 +80,10 @@ bool ManagedListener::isListening() {
}
void ManagedListener::refresh() {
- std::list<network::TcpListener>::iterator iter;
+ std::list<network::TcpListener*>::iterator iter;
if (!sockets.empty()) {
for (iter = sockets.begin(); iter != sockets.end(); ++iter)
- manager->remListener(&*iter);
+ manager->remListener(*iter);
sockets.clear();
}
if (!server)
@@ -101,11 +101,11 @@ void ManagedListener::refresh() {
if (!sockets.empty()) {
if (!localOnly) {
for (iter = sockets.begin(); iter != sockets.end(); ++iter)
- iter->setFilter(filter);
+ (*iter)->setFilter(filter);
}
try {
for (iter = sockets.begin(); iter != sockets.end(); ++iter)
- manager->addListener(&*iter, server, addrChangeNotifier);
+ manager->addListener(*iter, server, addrChangeNotifier);
} catch (...) {
// FIXME: Should unwind what we've added
sockets.clear();
diff --git a/win/winvnc/ManagedListener.h b/win/winvnc/ManagedListener.h
index 1c7099fe..e8d3c892 100644
--- a/win/winvnc/ManagedListener.h
+++ b/win/winvnc/ManagedListener.h
@@ -45,7 +45,7 @@ namespace winvnc {
protected:
void refresh();
- std::list<network::TcpListener> sockets;
+ std::list<network::TcpListener*> sockets;
network::TcpFilter* filter;
rfb::win32::SocketManager* manager;
rfb::win32::SocketManager::AddressChangeNotifier* addrChangeNotifier;