Backed out changeset 56a5acbceadb (bug 1046109) for bustage on a CLOSED TREE

This commit is contained in:
Carsten "Tomcat" Book
2014-07-31 10:14:57 +02:00
parent 7cfa6f7937
commit 86dcc2c750
5 changed files with 159 additions and 281 deletions

View File

@@ -19,10 +19,6 @@ static const size_t MAX_READ_SIZE = 1 << 16;
namespace mozilla {
namespace ipc {
//
// UnixSocketImpl
//
class UnixSocketImpl : public UnixSocketWatcher
{
public:
@@ -744,16 +740,16 @@ UnixSocketImpl::OnSocketCanSendWithoutBlocking()
}
}
//
// UnixSocketConsumer
//
UnixSocketConsumer::UnixSocketConsumer()
: mImpl(nullptr)
{ }
UnixSocketConsumer::UnixSocketConsumer() : mImpl(nullptr)
, mConnectionStatus(SOCKET_DISCONNECTED)
, mConnectTimestamp(0)
, mConnectDelayMs(0)
{
}
UnixSocketConsumer::~UnixSocketConsumer()
{
MOZ_ASSERT(mConnectionStatus == SOCKET_DISCONNECTED);
MOZ_ASSERT(!mImpl);
}
@@ -817,13 +813,40 @@ void
UnixSocketConsumer::GetSocketAddr(nsAString& aAddrStr)
{
aAddrStr.Truncate();
if (!mImpl || GetConnectionStatus() != SOCKET_CONNECTED) {
if (!mImpl || mConnectionStatus != SOCKET_CONNECTED) {
NS_WARNING("No socket currently open!");
return;
}
mImpl->GetSocketAddr(aAddrStr);
}
void
UnixSocketConsumer::NotifySuccess()
{
MOZ_ASSERT(NS_IsMainThread());
mConnectionStatus = SOCKET_CONNECTED;
mConnectTimestamp = PR_IntervalNow();
OnConnectSuccess();
}
void
UnixSocketConsumer::NotifyError()
{
MOZ_ASSERT(NS_IsMainThread());
mConnectionStatus = SOCKET_DISCONNECTED;
mConnectDelayMs = CalculateConnectDelayMs();
OnConnectError();
}
void
UnixSocketConsumer::NotifyDisconnect()
{
MOZ_ASSERT(NS_IsMainThread());
mConnectionStatus = SOCKET_DISCONNECTED;
mConnectDelayMs = CalculateConnectDelayMs();
OnDisconnect();
}
bool
UnixSocketConsumer::ConnectSocket(UnixSocketConnector* aConnector,
const char* aAddress,
@@ -842,7 +865,7 @@ UnixSocketConsumer::ConnectSocket(UnixSocketConnector* aConnector,
nsCString addr(aAddress);
MessageLoop* ioLoop = XRE_GetIOMessageLoop();
mImpl = new UnixSocketImpl(ioLoop, this, connector.forget(), addr);
SetConnectionStatus(SOCKET_CONNECTING);
mConnectionStatus = SOCKET_CONNECTING;
if (aDelayMs > 0) {
SocketDelayedConnectTask* connectTask = new SocketDelayedConnectTask(mImpl);
mImpl->SetDelayedConnectTask(connectTask);
@@ -868,11 +891,31 @@ UnixSocketConsumer::ListenSocket(UnixSocketConnector* aConnector)
mImpl = new UnixSocketImpl(XRE_GetIOMessageLoop(), this, connector.forget(),
EmptyCString());
SetConnectionStatus(SOCKET_LISTENING);
mConnectionStatus = SOCKET_LISTENING;
XRE_GetIOMessageLoop()->PostTask(FROM_HERE,
new SocketListenTask(mImpl));
return true;
}
uint32_t
UnixSocketConsumer::CalculateConnectDelayMs() const
{
MOZ_ASSERT(NS_IsMainThread());
uint32_t connectDelayMs = mConnectDelayMs;
if ((PR_IntervalNow()-mConnectTimestamp) > connectDelayMs) {
// reset delay if connection has been opened for a while, or...
connectDelayMs = 0;
} else if (!connectDelayMs) {
// ...start with a delay of ~1 sec, or...
connectDelayMs = 1<<10;
} else if (connectDelayMs < (1<<16)) {
// ...otherwise increase delay by a factor of 2
connectDelayMs <<= 1;
}
return connectDelayMs;
}
} // namespace ipc
} // namespace mozilla