From e98b64a0d252755a537c71d89902f7eaf927f3e6 Mon Sep 17 00:00:00 2001 From: Cervantes Yu Date: Sat, 19 May 2012 11:29:45 -0400 Subject: [PATCH] Bug 756036 - Fix race condition between rilworker and IO thread. r=kmachulis --- ipc/ril/Ril.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ipc/ril/Ril.cpp b/ipc/ril/Ril.cpp index 615a9ddb899..6ab2f95c1e4 100644 --- a/ipc/ril/Ril.cpp +++ b/ipc/ril/Ril.cpp @@ -320,11 +320,19 @@ RilClient::OnFileCanWriteWithoutBlocking(int fd) MOZ_ASSERT(fd == mSocket.get()); - while (!mOutgoingQ.empty() || mCurrentRilRawData != NULL) { - if(!mCurrentRilRawData) { - mCurrentRilRawData = mOutgoingQ.front(); - mOutgoingQ.pop(); - mCurrentWriteOffset = 0; + while (true) { + { + MutexAutoLock lock(mMutex); + + if (mOutgoingQ.empty() && !mCurrentRilRawData) { + return; + } + + if(!mCurrentRilRawData) { + mCurrentRilRawData = mOutgoingQ.front(); + mOutgoingQ.pop(); + mCurrentWriteOffset = 0; + } } const uint8_t *toWrite;