Bug 835920 - UnixSocket and Ril mis-interpret read() returning 0 as failure and enter infinite reconnect loop - r=kyle.machulis

This commit is contained in:
Benoit Jacob
2013-01-30 15:13:10 -05:00
parent e1a96100c2
commit 6019c0d5f3

View File

@@ -654,7 +654,7 @@ UnixSocketImpl::OnFileCanReadWithoutBlocking(int aFd)
if (!mIncoming) {
uint8_t data[MAX_READ_SIZE];
ssize_t ret = read(aFd, data, MAX_READ_SIZE);
if (ret <= 0) {
if (ret < 0) {
if (ret == -1) {
if (errno == EINTR) {
continue; // retry system call when interrupted
@@ -675,11 +675,13 @@ UnixSocketImpl::OnFileCanReadWithoutBlocking(int aFd)
NS_DispatchToMainThread(t);
return;
}
mIncoming = new UnixSocketRawData(ret);
memcpy(mIncoming->mData, data, ret);
nsRefPtr<SocketReceiveTask> t =
new SocketReceiveTask(this, mIncoming.forget());
NS_DispatchToMainThread(t);
if (ret) {
mIncoming = new UnixSocketRawData(ret);
memcpy(mIncoming->mData, data, ret);
nsRefPtr<SocketReceiveTask> t =
new SocketReceiveTask(this, mIncoming.forget());
NS_DispatchToMainThread(t);
}
if (ret < ssize_t(MAX_READ_SIZE)) {
return;
}