From 211f1afa9e321635b1d2fa55328b56fa5c49d295 Mon Sep 17 00:00:00 2001 From: Eric Chou Date: Sun, 17 Mar 2013 23:39:08 -0700 Subject: [PATCH] Bug 851563 - Fix memory leak in UnixSocketConsumer, r=qdot --- ipc/unixsocket/UnixSocket.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ipc/unixsocket/UnixSocket.cpp b/ipc/unixsocket/UnixSocket.cpp index 6e606224e1a7..57c0ad15d0af 100644 --- a/ipc/unixsocket/UnixSocket.cpp +++ b/ipc/unixsocket/UnixSocket.cpp @@ -780,12 +780,16 @@ UnixSocketConsumer::ConnectSocket(UnixSocketConnector* aConnector, { MOZ_ASSERT(aConnector); MOZ_ASSERT(NS_IsMainThread()); + + nsAutoPtr connector(aConnector); + if (mImpl) { NS_WARNING("Socket already connecting/connected!"); return false; } + nsCString addr(aAddress); - mImpl = new UnixSocketImpl(this, aConnector, addr); + mImpl = new UnixSocketImpl(this, connector.forget(), addr); MessageLoop* ioLoop = XRE_GetIOMessageLoop(); mConnectionStatus = SOCKET_CONNECTING; if (aDelayMs > 0) { @@ -801,11 +805,15 @@ UnixSocketConsumer::ListenSocket(UnixSocketConnector* aConnector) { MOZ_ASSERT(aConnector); MOZ_ASSERT(NS_IsMainThread()); + + nsAutoPtr connector(aConnector); + if (mImpl) { NS_WARNING("Socket already connecting/connected!"); return false; } - mImpl = new UnixSocketImpl(this, aConnector, EmptyCString()); + + mImpl = new UnixSocketImpl(this, connector.forget(), EmptyCString()); mConnectionStatus = SOCKET_LISTENING; XRE_GetIOMessageLoop()->PostTask(FROM_HERE, new SocketAcceptTask(mImpl));