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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user