diff --git a/include/platform/messagepool.h b/include/platform/messagepool.h index 418018160..317a2336a 100644 --- a/include/platform/messagepool.h +++ b/include/platform/messagepool.h @@ -65,11 +65,11 @@ extern "C" { /** * Initialize the platform implemented message pool. * - * @param[in] aMinNumFreeBuffers An int containing the minimum number of free buffers desired by OpenThread. + * @param[in] aMinNumFreeBuffers An uint16 containing the minimum number of free buffers desired by OpenThread. * @param[in] aBufferSize The size in bytes of a Buffer object. * */ -void otPlatMessagePoolInit(int aMinNumFreeBuffers, size_t aBufferSize); +void otPlatMessagePoolInit(uint16_t aMinNumFreeBuffers, size_t aBufferSize); /** * Allocate a buffer from the platform managed buffer pool. @@ -93,7 +93,7 @@ void otPlatMessagePoolFree(struct BufferHeader *aBuffer); * @returns The number of buffers currently free and available to OpenThread. * */ -int otPlatMessagePoolNumFreeBuffers(void); +uint16_t otPlatMessagePoolNumFreeBuffers(void); #ifdef __cplusplus } // extern "C" diff --git a/src/core/common/message.cpp b/src/core/common/message.cpp index 1f2232957..eaf46fe83 100644 --- a/src/core/common/message.cpp +++ b/src/core/common/message.cpp @@ -52,7 +52,7 @@ MessagePool::MessagePool(void) : mFreeBuffers = mBuffers; - for (int i = 0; i < kNumBuffers - 1; i++) + for (uint16_t i = 0; i < kNumBuffers - 1; i++) { mBuffers[i].SetNextBuffer(&mBuffers[i + 1]); } @@ -148,7 +148,7 @@ ThreadError MessagePool::FreeBuffers(Buffer *aBuffer) ThreadError MessagePool::ReclaimBuffers(int aNumBuffers) { - int numFreeBuffers; + uint16_t numFreeBuffers; #if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT numFreeBuffers = otPlatMessagePoolNumFreeBuffers(); @@ -156,7 +156,17 @@ ThreadError MessagePool::ReclaimBuffers(int aNumBuffers) numFreeBuffers = mNumFreeBuffers; #endif - return (aNumBuffers <= numFreeBuffers) ? kThreadError_None : kThreadError_NoBufs; + //First comparison is to get around issues with comparing + //signed and unsigned numbers, if aNumBuffers is negative then + //the second comparison wont be attempted. + if (aNumBuffers < 0 || aNumBuffers <= numFreeBuffers) + { + return kThreadError_None; + } + else + { + return kThreadError_NoBufs; + } } Message *MessagePool::Iterator::Next(void) const diff --git a/src/core/common/message.hpp b/src/core/common/message.hpp index f6dc879bf..2970e6906 100644 --- a/src/core/common/message.hpp +++ b/src/core/common/message.hpp @@ -1102,9 +1102,9 @@ public: * */ #if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT - uint16_t GetFreeBufferCount(void) const { return static_cast(otPlatMessagePoolNumFreeBuffers()); } + uint16_t GetFreeBufferCount(void) const { return otPlatMessagePoolNumFreeBuffers(); } #else - uint16_t GetFreeBufferCount(void) const { return static_cast(mNumFreeBuffers); } + uint16_t GetFreeBufferCount(void) const { return mNumFreeBuffers; } #endif private: @@ -1119,9 +1119,9 @@ private: PriorityQueue *GetAllMessagesQueue(void) { return &mAllQueue; } #if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT == 0 - int mNumFreeBuffers; - Buffer mBuffers[kNumBuffers]; - Buffer *mFreeBuffers; + uint16_t mNumFreeBuffers; + Buffer mBuffers[kNumBuffers]; + Buffer *mFreeBuffers; #endif PriorityQueue mAllQueue; };