diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2010-06-14 21:26:43 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2010-06-14 21:26:43 +0000 |
| commit | 97e228c38f312e455e50784146e8a76da7790f97 (patch) | |
| tree | e9fbee7a7d64797d2cae233eb7eb6b5d75d34117 /src | |
| parent | 5e5fa99148a14f45d162b43dfbf31db3eb110f0d (diff) | |
| download | libbu++-97e228c38f312e455e50784146e8a76da7790f97.tar.gz libbu++-97e228c38f312e455e50784146e8a76da7790f97.tar.bz2 libbu++-97e228c38f312e455e50784146e8a76da7790f97.tar.xz libbu++-97e228c38f312e455e50784146e8a76da7790f97.zip | |
Fixed a minor memory leak in the server. It makes a difference on popular
servers that run for weeks or more.
Diffstat (limited to '')
| -rw-r--r-- | src/client.cpp | 1 | ||||
| -rw-r--r-- | src/server.cpp | 29 | ||||
| -rw-r--r-- | src/server.h | 1 |
3 files changed, 16 insertions, 15 deletions
diff --git a/src/client.cpp b/src/client.cpp index 88eb49d..095dd91 100644 --- a/src/client.cpp +++ b/src/client.cpp | |||
| @@ -33,6 +33,7 @@ Bu::Client::~Client() | |||
| 33 | delete *i; | 33 | delete *i; |
| 34 | } | 34 | } |
| 35 | pTopStream = pSocket = NULL; | 35 | pTopStream = pSocket = NULL; |
| 36 | delete pfLink; | ||
| 36 | } | 37 | } |
| 37 | 38 | ||
| 38 | void Bu::Client::processInput() | 39 | void Bu::Client::processInput() |
diff --git a/src/server.cpp b/src/server.cpp index 64ddf9f..51c056a 100644 --- a/src/server.cpp +++ b/src/server.cpp | |||
| @@ -84,10 +84,7 @@ void Bu::Server::scan() | |||
| 84 | pClient->processInput(); | 84 | pClient->processInput(); |
| 85 | if( !pClient->isOpen() ) | 85 | if( !pClient->isOpen() ) |
| 86 | { | 86 | { |
| 87 | onClosedConnection( pClient ); | 87 | closeClient( j ); |
| 88 | pClient->close(); | ||
| 89 | hClients.erase( j ); | ||
| 90 | FD_CLR( j, &fdActive ); | ||
| 91 | } | 88 | } |
| 92 | } | 89 | } |
| 93 | } | 90 | } |
| @@ -102,10 +99,7 @@ void Bu::Server::scan() | |||
| 102 | } | 99 | } |
| 103 | catch( Bu::SocketException &e ) | 100 | catch( Bu::SocketException &e ) |
| 104 | { | 101 | { |
| 105 | onClosedConnection( pClient ); | 102 | closeClient( j ); |
| 106 | pClient->close(); | ||
| 107 | hClients.erase( j ); | ||
| 108 | FD_CLR( j, &fdActive ); | ||
| 109 | } | 103 | } |
| 110 | } | 104 | } |
| 111 | catch( Bu::HashException &e ) | 105 | catch( Bu::HashException &e ) |
| @@ -130,11 +124,7 @@ void Bu::Server::scan() | |||
| 130 | 124 | ||
| 131 | for( Bu::List<int>::iterator i = lDelete.begin(); i != lDelete.end(); i++ ) | 125 | for( Bu::List<int>::iterator i = lDelete.begin(); i != lDelete.end(); i++ ) |
| 132 | { | 126 | { |
| 133 | Client *pClient = hClients.get( *i ); | 127 | closeClient( *i ); |
| 134 | onClosedConnection( pClient ); | ||
| 135 | pClient->close(); | ||
| 136 | hClients.erase( *i ); | ||
| 137 | FD_CLR( *i, &fdActive ); | ||
| 138 | } | 128 | } |
| 139 | 129 | ||
| 140 | if( bAutoTick ) | 130 | if( bAutoTick ) |
| @@ -206,10 +196,19 @@ void Bu::Server::shutdown() | |||
| 206 | 196 | ||
| 207 | for( ClientHash::iterator i = hClients.begin(); i != hClients.end(); i++ ) | 197 | for( ClientHash::iterator i = hClients.begin(); i != hClients.end(); i++ ) |
| 208 | { | 198 | { |
| 209 | onClosedConnection( *i ); | 199 | closeClient( i.getKey() ); |
| 210 | delete *i; | ||
| 211 | } | 200 | } |
| 212 | 201 | ||
| 213 | hClients.clear(); | 202 | hClients.clear(); |
| 214 | } | 203 | } |
| 215 | 204 | ||
| 205 | void Bu::Server::closeClient( int iSocket ) | ||
| 206 | { | ||
| 207 | Bu::Client *pClient = hClients.get( iSocket ); | ||
| 208 | onClosedConnection( pClient ); | ||
| 209 | pClient->close(); | ||
| 210 | hClients.erase( iSocket ); | ||
| 211 | FD_CLR( iSocket, &fdActive ); | ||
| 212 | delete pClient; | ||
| 213 | } | ||
| 214 | |||
diff --git a/src/server.h b/src/server.h index e09246f..74ee99a 100644 --- a/src/server.h +++ b/src/server.h | |||
| @@ -72,6 +72,7 @@ namespace Bu | |||
| 72 | void shutdown(); | 72 | void shutdown(); |
| 73 | 73 | ||
| 74 | private: | 74 | private: |
| 75 | void closeClient( int iSocket ); | ||
| 75 | class SrvClientLink : public Bu::ClientLink | 76 | class SrvClientLink : public Bu::ClientLink |
| 76 | { | 77 | { |
| 77 | public: | 78 | public: |
