Backed out changeset f3c055585a4f (bug 843857) for B2G mochitest bustage.

This commit is contained in:
Ryan VanderMeulen 2014-01-24 17:19:52 -05:00
parent 2163779703
commit 6c0a308b3e

View File

@ -174,9 +174,6 @@ public:
RefPtr<UnixSocketConsumer> mConsumer; RefPtr<UnixSocketConsumer> mConsumer;
private: private:
void FireSocketError();
/** /**
* libevent triggered functions that reads data from socket when available and * libevent triggered functions that reads data from socket when available and
* guarenteed non-blocking. Only to be called on IO thread. * guarenteed non-blocking. Only to be called on IO thread.
@ -489,48 +486,30 @@ void ShutdownSocketTask::Run()
NS_ENSURE_SUCCESS_VOID(rv); NS_ENSURE_SUCCESS_VOID(rv);
} }
void
UnixSocketImpl::FireSocketError()
{
MOZ_ASSERT(!NS_IsMainThread());
// Clean up watchers, statuses, fds
mReadWatcher.StopWatchingFileDescriptor();
mWriteWatcher.StopWatchingFileDescriptor();
mConnectionStatus = SOCKET_DISCONNECTED;
mFd.reset(-1);
// Tell the main thread we've errored
nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
}
void void
UnixSocketImpl::Accept() UnixSocketImpl::Accept()
{ {
MOZ_ASSERT(!NS_IsMainThread()); MOZ_ASSERT(!NS_IsMainThread());
MOZ_ASSERT(mConnector);
if (!mConnector) {
NS_WARNING("No connector object available!");
return;
}
// This will set things we don't particularly care about, but it will hand // This will set things we don't particularly care about, but it will hand
// back the correct structure size which is what we do care about. // back the correct structure size which is what we do care about.
if (!mConnector->CreateAddr(true, mAddrSize, mAddr, nullptr)) { if (!mConnector->CreateAddr(true, mAddrSize, mAddr, nullptr)) {
NS_WARNING("Cannot create socket address!"); NS_WARNING("Cannot create socket address!");
FireSocketError();
return; return;
} }
if (mFd.get() < 0) { if (mFd.get() < 0) {
mFd = mConnector->Create(); mFd = mConnector->Create();
if (mFd.get() < 0) { if (mFd.get() < 0) {
NS_WARNING("Cannot create socket fd!");
FireSocketError();
return; return;
} }
if (!SetSocketFlags()) { if (!SetSocketFlags()) {
NS_WARNING("Cannot set socket flags!");
FireSocketError();
return; return;
} }
@ -538,7 +517,6 @@ UnixSocketImpl::Accept()
#ifdef DEBUG #ifdef DEBUG
CHROMIUM_LOG("...bind(%d) gave errno %d", mFd.get(), errno); CHROMIUM_LOG("...bind(%d) gave errno %d", mFd.get(), errno);
#endif #endif
FireSocketError();
return; return;
} }
@ -546,13 +524,15 @@ UnixSocketImpl::Accept()
#ifdef DEBUG #ifdef DEBUG
CHROMIUM_LOG("...listen(%d) gave errno %d", mFd.get(), errno); CHROMIUM_LOG("...listen(%d) gave errno %d", mFd.get(), errno);
#endif #endif
FireSocketError();
return; return;
} }
if (!mConnector->SetUpListenSocket(mFd)) { if (!mConnector->SetUpListenSocket(mFd)) {
NS_WARNING("Could not set up listen socket!"); NS_WARNING("Could not set up listen socket!");
FireSocketError(); nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
@ -565,13 +545,15 @@ void
UnixSocketImpl::Connect() UnixSocketImpl::Connect()
{ {
MOZ_ASSERT(!NS_IsMainThread()); MOZ_ASSERT(!NS_IsMainThread());
MOZ_ASSERT(mConnector);
if (!mConnector) {
NS_WARNING("No connector object available!");
return;
}
if (mFd.get() < 0) { if (mFd.get() < 0) {
mFd = mConnector->Create(); mFd = mConnector->Create();
if (mFd.get() < 0) { if (mFd.get() < 0) {
NS_WARNING("Cannot create socket fd!");
FireSocketError();
return; return;
} }
} }
@ -580,14 +562,15 @@ UnixSocketImpl::Connect()
if (!mConnector->CreateAddr(false, mAddrSize, mAddr, mAddress.get())) { if (!mConnector->CreateAddr(false, mAddrSize, mAddr, mAddress.get())) {
NS_WARNING("Cannot create socket address!"); NS_WARNING("Cannot create socket address!");
FireSocketError();
return; return;
} }
// Select non-blocking IO. // Select non-blocking IO.
if (-1 == fcntl(mFd.get(), F_SETFL, O_NONBLOCK)) { if (-1 == fcntl(mFd.get(), F_SETFL, O_NONBLOCK)) {
NS_WARNING("Cannot set nonblock!"); nsRefPtr<OnSocketEventTask> t =
FireSocketError(); new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
@ -600,12 +583,20 @@ UnixSocketImpl::Connect()
int current_opts = fcntl(mFd.get(), F_GETFL, 0); int current_opts = fcntl(mFd.get(), F_GETFL, 0);
if (-1 == current_opts) { if (-1 == current_opts) {
NS_WARNING("Cannot get socket opts!"); NS_WARNING("Cannot get socket opts!");
FireSocketError(); mFd.reset(-1);
nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
if (-1 == fcntl(mFd.get(), F_SETFL, current_opts & ~O_NONBLOCK)) { if (-1 == fcntl(mFd.get(), F_SETFL, current_opts & ~O_NONBLOCK)) {
NS_WARNING("Cannot set socket opts to blocking!"); NS_WARNING("Cannot set socket opts to blocking!");
FireSocketError(); mFd.reset(-1);
nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
@ -625,19 +616,20 @@ UnixSocketImpl::Connect()
#if DEBUG #if DEBUG
CHROMIUM_LOG("Socket connect errno=%d\n", errno); CHROMIUM_LOG("Socket connect errno=%d\n", errno);
#endif #endif
FireSocketError(); mFd.reset(-1);
nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
if (!SetSocketFlags()) { if (!SetSocketFlags()) {
NS_WARNING("Cannot set socket flags!");
FireSocketError();
return; return;
} }
if (!mConnector->SetUp(mFd)) { if (!mConnector->SetUp(mFd)) {
NS_WARNING("Could not set up socket!"); NS_WARNING("Could not set up socket!");
FireSocketError();
return; return;
} }
@ -870,19 +862,30 @@ UnixSocketImpl::OnFileCanWriteWithoutBlocking(int aFd)
if (ret || error) { if (ret || error) {
NS_WARNING("getsockopt failure on async socket connect!"); NS_WARNING("getsockopt failure on async socket connect!");
FireSocketError(); mFd.reset(-1);
nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
if (!SetSocketFlags()) { if (!SetSocketFlags()) {
NS_WARNING("Cannot set socket flags!"); mFd.reset(-1);
FireSocketError(); nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }
if (!mConnector->SetUp(mFd)) { if (!mConnector->SetUp(mFd)) {
NS_WARNING("Could not set up socket!"); NS_WARNING("Could not set up socket!");
FireSocketError(); mFd.reset(-1);
nsRefPtr<OnSocketEventTask> t =
new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR);
NS_DispatchToMainThread(t);
mConnectionStatus = SOCKET_DISCONNECTED;
return; return;
} }