summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/bbackupd/BackupClientContext.cpp22
-rw-r--r--bin/bbackupd/BackupClientContext.h2
2 files changed, 13 insertions, 11 deletions
diff --git a/bin/bbackupd/BackupClientContext.cpp b/bin/bbackupd/BackupClientContext.cpp
index e1c4349f..20189fad 100644
--- a/bin/bbackupd/BackupClientContext.cpp
+++ b/bin/bbackupd/BackupClientContext.cpp
@@ -115,8 +115,9 @@ BackupProtocolClient &BackupClientContext::GetConnection()
// there shouldn't be a connection open
ASSERT(mapSocket.get() == 0);
-
- SocketStreamTLS *pSocket = new SocketStreamTLS;
+ // Defensive. Must close connection before releasing any old socket.
+ mapConnection.reset();
+ mapSocket.reset(new SocketStreamTLS);
try
{
@@ -128,20 +129,21 @@ BackupProtocolClient &BackupClientContext::GetConnection()
mHostname << "'...");
// Connect!
- pSocket->Open(mrTLSContext, Socket::TypeINET, mHostname.c_str(), mPort);
+ ((SocketStreamTLS *)(mapSocket.get()))->Open(mrTLSContext,
+ Socket::TypeINET, mHostname, mPort);
if(mTcpNiceMode)
{
- mapNice.reset(new NiceSocketStream(std::auto_ptr<SocketStream>(pSocket)));
+ // Pass control of mapSocket to NiceSocketStream,
+ // which will take care of destroying it for us.
+ mapNice.reset(new NiceSocketStream(mapSocket));
mapConnection.reset(new BackupProtocolClient(*mapNice));
}
else
{
- mapConnection.reset(new BackupProtocolClient(*pSocket));
+ mapConnection.reset(new BackupProtocolClient(*mapSocket));
}
- pSocket = NULL;
-
// Set logging option
mapConnection->SetLogToSysLog(mExtendedLogging);
@@ -189,8 +191,8 @@ BackupProtocolClient &BackupClientContext::GetConnection()
try
{
mapConnection->QueryFinished();
- mapSocket.reset();
mapNice.reset();
+ mapSocket.reset();
}
catch(...)
{
@@ -219,8 +221,8 @@ BackupProtocolClient &BackupClientContext::GetConnection()
{
// Clean up.
mapConnection.reset();
- mapSocket.reset();
mapNice.reset();
+ mapSocket.reset();
throw;
}
@@ -269,8 +271,8 @@ void BackupClientContext::CloseAnyOpenConnection()
try
{
// Be nice about closing the socket
- mapSocket.reset();
mapNice.reset();
+ mapSocket.reset();
}
catch(...)
{
diff --git a/bin/bbackupd/BackupClientContext.h b/bin/bbackupd/BackupClientContext.h
index 41d90ff0..9d0ca88f 100644
--- a/bin/bbackupd/BackupClientContext.h
+++ b/bin/bbackupd/BackupClientContext.h
@@ -224,7 +224,7 @@ private:
std::string mHostname;
int mPort;
uint32_t mAccountNumber;
- std::auto_ptr<IOStream> mapSocket;
+ std::auto_ptr<SocketStream> mapSocket;
std::auto_ptr<NiceSocketStream> mapNice;
std::auto_ptr<BackupProtocolClient> mapConnection;
bool mExtendedLogging;