Loading libs/rs/rsContext.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -744,7 +744,7 @@ bool Context::sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool w return false; } if (!waitForSpace) { if (mIO.mToClient.getFreeSpace() <= (len + 8)) { if (!mIO.mToClient.makeSpaceNonBlocking(len + 8)) { // Not enough room, and not waiting. return false; } Loading libs/rs/rsLocklessFifo.cpp +26 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,30 @@ void LocklessCommandFifo::next() //dumpState("next"); } bool LocklessCommandFifo::makeSpaceNonBlocking(uint32_t bytes) { //dumpState("make space non-blocking"); if ((mPut+bytes) > mEnd) { // Need to loop regardless of where get is. if((mGet > mPut) && (mBuffer+4 >= mGet)) { return false; } // Toss in a reset then the normal wait for space will do the rest. reinterpret_cast<uint16_t *>(mPut)[0] = 0; reinterpret_cast<uint16_t *>(mPut)[1] = 0; mPut = mBuffer; mSignalToWorker.set(); } // it will fit here so we just need to wait for space. if(getFreeSpace() < bytes) { return false; } return true; } void LocklessCommandFifo::makeSpace(uint32_t bytes) { //dumpState("make space"); Loading @@ -182,6 +206,7 @@ void LocklessCommandFifo::makeSpace(uint32_t bytes) reinterpret_cast<uint16_t *>(mPut)[0] = 0; reinterpret_cast<uint16_t *>(mPut)[1] = 0; mPut = mBuffer; mSignalToWorker.set(); } // it will fit here so we just need to wait for space. Loading @@ -193,6 +218,6 @@ void LocklessCommandFifo::makeSpace(uint32_t bytes) void LocklessCommandFifo::dumpState(const char *s) const { LOGV("%s put %p, get %p, buf %p, end %p", s, mPut, mGet, mBuffer, mEnd); LOGV("%s %p put %p, get %p, buf %p, end %p", s, this, mPut, mGet, mBuffer, mEnd); } libs/rs/rsLocklessFifo.h +1 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ public: void next(); void makeSpace(uint32_t bytes); bool makeSpaceNonBlocking(uint32_t bytes); bool isEmpty() const; uint32_t getFreeSpace() const; Loading Loading
libs/rs/rsContext.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -744,7 +744,7 @@ bool Context::sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool w return false; } if (!waitForSpace) { if (mIO.mToClient.getFreeSpace() <= (len + 8)) { if (!mIO.mToClient.makeSpaceNonBlocking(len + 8)) { // Not enough room, and not waiting. return false; } Loading
libs/rs/rsLocklessFifo.cpp +26 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,30 @@ void LocklessCommandFifo::next() //dumpState("next"); } bool LocklessCommandFifo::makeSpaceNonBlocking(uint32_t bytes) { //dumpState("make space non-blocking"); if ((mPut+bytes) > mEnd) { // Need to loop regardless of where get is. if((mGet > mPut) && (mBuffer+4 >= mGet)) { return false; } // Toss in a reset then the normal wait for space will do the rest. reinterpret_cast<uint16_t *>(mPut)[0] = 0; reinterpret_cast<uint16_t *>(mPut)[1] = 0; mPut = mBuffer; mSignalToWorker.set(); } // it will fit here so we just need to wait for space. if(getFreeSpace() < bytes) { return false; } return true; } void LocklessCommandFifo::makeSpace(uint32_t bytes) { //dumpState("make space"); Loading @@ -182,6 +206,7 @@ void LocklessCommandFifo::makeSpace(uint32_t bytes) reinterpret_cast<uint16_t *>(mPut)[0] = 0; reinterpret_cast<uint16_t *>(mPut)[1] = 0; mPut = mBuffer; mSignalToWorker.set(); } // it will fit here so we just need to wait for space. Loading @@ -193,6 +218,6 @@ void LocklessCommandFifo::makeSpace(uint32_t bytes) void LocklessCommandFifo::dumpState(const char *s) const { LOGV("%s put %p, get %p, buf %p, end %p", s, mPut, mGet, mBuffer, mEnd); LOGV("%s %p put %p, get %p, buf %p, end %p", s, this, mPut, mGet, mBuffer, mEnd); }
libs/rs/rsLocklessFifo.h +1 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ public: void next(); void makeSpace(uint32_t bytes); bool makeSpaceNonBlocking(uint32_t bytes); bool isEmpty() const; uint32_t getFreeSpace() const; Loading