Remove globals from message.cpp.

This commit is contained in:
Jonathan Hui
2016-09-07 13:30:22 -07:00
parent 32b6d343c4
commit e22c123904
19 changed files with 196 additions and 173 deletions
+1 -1
View File
@@ -1060,7 +1060,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
if (sCount) if (sCount)
+64 -65
View File
@@ -38,88 +38,82 @@
namespace Thread { namespace Thread {
static Buffer *NewBuffer(void); MessagePool::MessagePool(void)
static ThreadError FreeBuffers(Buffer *aBuffer); {
static ThreadError ReclaimBuffers(int aNumBuffers); mFreeBuffers = mBuffers;
static int sNumFreeBuffers; for (int i = 0; i < kNumBuffers - 1; i++)
static Buffer sBuffers[kNumBuffers]; {
static Buffer *sFreeBuffers; mBuffers[i].SetNextBuffer(&mBuffers[i + 1]);
static MessageList sAll; }
Buffer *NewBuffer(void) mBuffers[kNumBuffers - 1].SetNextBuffer(NULL);
mNumFreeBuffers = kNumBuffers;
}
Message *MessagePool::New(uint8_t aType, uint16_t aReserved)
{
Message *message = NULL;
VerifyOrExit((message = static_cast<Message *>(NewBuffer())) != NULL, ;);
memset(message, 0, sizeof(*message));
message->SetMessagePool(this);
message->SetType(aType);
message->SetReserved(aReserved);
message->SetLinkSecurityEnabled(true);
if (message->SetLength(0) != kThreadError_None)
{
Free(message);
message = NULL;
}
exit:
return message;
}
ThreadError MessagePool::Free(Message *aMessage)
{
assert(aMessage->GetMessageList(MessageInfo::kListAll).mList == NULL &&
aMessage->GetMessageList(MessageInfo::kListInterface).mList == NULL);
return FreeBuffers(static_cast<Buffer *>(aMessage));
}
Buffer *MessagePool::NewBuffer(void)
{ {
Buffer *buffer = NULL; Buffer *buffer = NULL;
VerifyOrExit(sFreeBuffers != NULL, ;); VerifyOrExit(mFreeBuffers != NULL, ;);
buffer = sFreeBuffers; buffer = mFreeBuffers;
sFreeBuffers = sFreeBuffers->GetNextBuffer(); mFreeBuffers = mFreeBuffers->GetNextBuffer();
buffer->SetNextBuffer(NULL); buffer->SetNextBuffer(NULL);
sNumFreeBuffers--; mNumFreeBuffers--;
exit: exit:
return buffer; return buffer;
} }
ThreadError FreeBuffers(Buffer *aBuffer) ThreadError MessagePool::FreeBuffers(Buffer *aBuffer)
{ {
Buffer *tmpBuffer; Buffer *tmpBuffer;
while (aBuffer != NULL) while (aBuffer != NULL)
{ {
tmpBuffer = aBuffer->GetNextBuffer(); tmpBuffer = aBuffer->GetNextBuffer();
aBuffer->SetNextBuffer(sFreeBuffers); aBuffer->SetNextBuffer(mFreeBuffers);
sFreeBuffers = aBuffer; mFreeBuffers = aBuffer;
sNumFreeBuffers++; mNumFreeBuffers++;
aBuffer = tmpBuffer; aBuffer = tmpBuffer;
} }
return kThreadError_None; return kThreadError_None;
} }
ThreadError ReclaimBuffers(int aNumBuffers) ThreadError MessagePool::ReclaimBuffers(int aNumBuffers)
{ {
return (aNumBuffers <= sNumFreeBuffers) ? kThreadError_None : kThreadError_NoBufs; return (aNumBuffers <= mNumFreeBuffers) ? kThreadError_None : kThreadError_NoBufs;
}
ThreadError Message::Init(void)
{
sFreeBuffers = sBuffers;
for (int i = 0; i < kNumBuffers - 1; i++)
{
sBuffers[i].SetNextBuffer(&sBuffers[i + 1]);
}
sBuffers[kNumBuffers - 1].SetNextBuffer(NULL);
sNumFreeBuffers = kNumBuffers;
return kThreadError_None;
}
Message *Message::New(uint8_t aType, uint16_t aReserved)
{
Message *message = NULL;
VerifyOrExit((message = reinterpret_cast<Message *>(NewBuffer())) != NULL, ;);
memset(message, 0, sizeof(*message));
message->SetType(aType);
message->SetReserved(aReserved);
message->SetLinkSecurityEnabled(true);
VerifyOrExit(message->SetLength(0) == kThreadError_None, Message::Free(*message));
exit:
return message;
}
ThreadError Message::Free(Message &aMessage)
{
assert(aMessage.GetMessageList(MessageInfo::kListAll).mList == NULL &&
aMessage.GetMessageList(MessageInfo::kListInterface).mList == NULL);
return FreeBuffers(reinterpret_cast<Buffer *>(&aMessage));
} }
ThreadError Message::ResizeMessage(uint16_t aLength) ThreadError Message::ResizeMessage(uint16_t aLength)
@@ -135,7 +129,7 @@ ThreadError Message::ResizeMessage(uint16_t aLength)
{ {
if (curBuffer->GetNextBuffer() == NULL) if (curBuffer->GetNextBuffer() == NULL)
{ {
curBuffer->SetNextBuffer(NewBuffer()); curBuffer->SetNextBuffer(GetMessagePool()->NewBuffer());
VerifyOrExit(curBuffer->GetNextBuffer() != NULL, error = kThreadError_NoBufs); VerifyOrExit(curBuffer->GetNextBuffer() != NULL, error = kThreadError_NoBufs);
} }
@@ -148,12 +142,17 @@ ThreadError Message::ResizeMessage(uint16_t aLength)
curBuffer = curBuffer->GetNextBuffer(); curBuffer = curBuffer->GetNextBuffer();
lastBuffer->SetNextBuffer(NULL); lastBuffer->SetNextBuffer(NULL);
FreeBuffers(curBuffer); GetMessagePool()->FreeBuffers(curBuffer);
exit: exit:
return error; return error;
} }
ThreadError Message::Free(void)
{
return GetMessagePool()->Free(this);
}
Message *Message::GetNext(void) const Message *Message::GetNext(void) const
{ {
return GetMessageList(MessageInfo::kListInterface).mNext; return GetMessageList(MessageInfo::kListInterface).mNext;
@@ -181,7 +180,7 @@ ThreadError Message::SetLength(uint16_t aLength)
bufs -= (((totalLengthCurrent - kHeadBufferDataSize) - 1) / kBufferDataSize) + 1; bufs -= (((totalLengthCurrent - kHeadBufferDataSize) - 1) / kBufferDataSize) + 1;
} }
SuccessOrExit(error = ReclaimBuffers(bufs)); SuccessOrExit(error = GetMessagePool()->ReclaimBuffers(bufs));
SuccessOrExit(error = ResizeMessage(totalLengthRequest)); SuccessOrExit(error = ResizeMessage(totalLengthRequest));
mInfo.mLength = aLength; mInfo.mLength = aLength;
@@ -292,7 +291,7 @@ uint16_t Message::Read(uint16_t aOffset, uint16_t aLength, void *aBuf) const
aLength -= bytesToCopy; aLength -= bytesToCopy;
bytesCopied += bytesToCopy; bytesCopied += bytesToCopy;
aBuf = reinterpret_cast<uint8_t *>(aBuf) + bytesToCopy; aBuf = static_cast<uint8_t *>(aBuf) + bytesToCopy;
aOffset = 0; aOffset = 0;
} }
@@ -328,7 +327,7 @@ uint16_t Message::Read(uint16_t aOffset, uint16_t aLength, void *aBuf) const
aLength -= bytesToCopy; aLength -= bytesToCopy;
bytesCopied += bytesToCopy; bytesCopied += bytesToCopy;
aBuf = reinterpret_cast<uint8_t *>(aBuf) + bytesToCopy; aBuf = static_cast<uint8_t *>(aBuf) + bytesToCopy;
curBuffer = curBuffer->GetNextBuffer(); curBuffer = curBuffer->GetNextBuffer();
aOffset = 0; aOffset = 0;
@@ -367,7 +366,7 @@ int Message::Write(uint16_t aOffset, uint16_t aLength, const void *aBuf)
aLength -= bytesToCopy; aLength -= bytesToCopy;
bytesCopied += bytesToCopy; bytesCopied += bytesToCopy;
aBuf = reinterpret_cast<const uint8_t *>(aBuf) + bytesToCopy; aBuf = static_cast<const uint8_t *>(aBuf) + bytesToCopy;
aOffset = 0; aOffset = 0;
} }
@@ -403,7 +402,7 @@ int Message::Write(uint16_t aOffset, uint16_t aLength, const void *aBuf)
aLength -= bytesToCopy; aLength -= bytesToCopy;
bytesCopied += bytesToCopy; bytesCopied += bytesToCopy;
aBuf = reinterpret_cast<const uint8_t *>(aBuf) + bytesToCopy; aBuf = static_cast<const uint8_t *>(aBuf) + bytesToCopy;
curBuffer = curBuffer->GetNextBuffer(); curBuffer = curBuffer->GetNextBuffer();
aOffset = 0; aOffset = 0;
@@ -694,7 +693,7 @@ Message *MessageQueue::GetHead(void) const
ThreadError MessageQueue::Enqueue(Message &aMessage) ThreadError MessageQueue::Enqueue(Message &aMessage)
{ {
aMessage.GetMessageList(MessageInfo::kListAll).mList = &sAll; aMessage.GetMessageList(MessageInfo::kListAll).mList = &aMessage.GetMessagePool()->mAll;
aMessage.GetMessageList(MessageInfo::kListInterface).mList = &mInterface; aMessage.GetMessageList(MessageInfo::kListInterface).mList = &mInterface;
AddToList(MessageInfo::kListAll, aMessage); AddToList(MessageInfo::kListAll, aMessage);
AddToList(MessageInfo::kListInterface, aMessage); AddToList(MessageInfo::kListInterface, aMessage);
+58 -28
View File
@@ -61,6 +61,7 @@ enum
}; };
class Message; class Message;
class MessagePool;
/** /**
* This structure contains pointers to the head and tail of a Message list. * This structure contains pointers to the head and tail of a Message list.
@@ -98,6 +99,7 @@ struct BufferHeader
*/ */
struct MessageInfo struct MessageInfo
{ {
MessagePool *mMessagePool; ///< Identifies the message pool for this message.
enum enum
{ {
kListAll = 0, ///< Identifies the all messages list. kListAll = 0, ///< Identifies the all messages list.
@@ -200,6 +202,7 @@ private:
*/ */
class Message: private Buffer class Message: private Buffer
{ {
friend class MessagePool;
friend class MessageQueue; friend class MessageQueue;
public: public:
@@ -210,6 +213,12 @@ public:
kTypeMacDataPoll = 2, ///< A MAC data poll message kTypeMacDataPoll = 2, ///< A MAC data poll message
}; };
/**
* This method frees this message buffer.
*
*/
ThreadError Free(void);
/** /**
* This method returns a pointer to the next message in the same interface list. * This method returns a pointer to the next message in the same interface list.
* *
@@ -508,35 +517,11 @@ public:
*/ */
uint16_t UpdateChecksum(uint16_t aChecksum, uint16_t aOffset, uint16_t aLength) const; uint16_t UpdateChecksum(uint16_t aChecksum, uint16_t aOffset, uint16_t aLength) const;
/**
* This static method is used to initialize the message buffer pool.
*
*/
static ThreadError Init(void);
/**
* This static method is used to obtain a new message.
*
* @param[in] aType The message type.
* @param[in] aReserveHeader The number of header bytes to reserve.
*
* @returns A pointer to the message or NULL if no message buffers are available.
*
*/
static Message *New(uint8_t aType, uint16_t aReserveHeader);
/**
* This static method is used to free a message and return all message buffers to the buffer pool.
*
* @param[in] aMessage The message to free.
*
* @retval kThreadError_None Successfully freed the message.
* @retval kThreadError_InvalidArgs The message is already freed.
*
*/
static ThreadError Free(Message &aMessage);
private: private:
MessagePool *GetMessagePool(void) { return mInfo.mMessagePool; }
void SetMessagePool(MessagePool *aMessagePool) { mInfo.mMessagePool = aMessagePool; }
/** /**
* This method returns a reference to a message list. * This method returns a reference to a message list.
* *
@@ -664,6 +649,51 @@ private:
MessageList mInterface; ///< The instance-specific message list. MessageList mInterface; ///< The instance-specific message list.
}; };
class MessagePool
{
friend class Message;
friend class MessageQueue;
public:
/**
* This constructor initializes the object.
*
*/
MessagePool(void);
/**
* This method is used to obtain a new message.
*
* @param[in] aType The message type.
* @param[in] aReserveHeader The number of header bytes to reserve.
*
* @returns A pointer to the message or NULL if no message buffers are available.
*
*/
Message *New(uint8_t aType, uint16_t aReserveHeader);
/**
* This method is used to free a message and return all message buffers to the buffer pool.
*
* @param[in] aMessage The message to free.
*
* @retval kThreadError_None Successfully freed the message.
* @retval kThreadError_InvalidArgs The message is already freed.
*
*/
ThreadError Free(Message *aMessage);
private:
Buffer *NewBuffer(void);
ThreadError FreeBuffers(Buffer *aBuffer);
ThreadError ReclaimBuffers(int aNumBuffers);
int mNumFreeBuffers;
Buffer mBuffers[kNumBuffers];
Buffer *mFreeBuffers;
MessageList mAll;
};
/** /**
* @} * @}
* *
+2 -2
View File
@@ -137,7 +137,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -232,7 +232,7 @@ exit:
if (error != kThreadError_None && replyMessage != NULL) if (error != kThreadError_None && replyMessage != NULL)
{ {
Message::Free(*replyMessage); replyMessage->Free();
} }
return error; return error;
+3 -3
View File
@@ -63,7 +63,7 @@ Ip6::Ip6(void):
Message *Ip6::NewMessage(uint16_t reserved) Message *Ip6::NewMessage(uint16_t reserved)
{ {
return Message::New(Message::kTypeIp6, sizeof(Header) + sizeof(HopByHopHeader) + sizeof(OptionMpl) + reserved); return mMessagePool.New(Message::kTypeIp6, sizeof(Header) + sizeof(HopByHopHeader) + sizeof(OptionMpl) + reserved);
} }
void Ip6::SetForwardingEnabled(bool aEnable) void Ip6::SetForwardingEnabled(bool aEnable)
@@ -385,7 +385,7 @@ exit:
if (error != kThreadError_None && messageCopy != NULL) if (error != kThreadError_None && messageCopy != NULL)
{ {
Message::Free(*messageCopy); messageCopy->Free();
} }
} }
@@ -505,7 +505,7 @@ exit:
if (error != kThreadError_None || !forward) if (error != kThreadError_None || !forward)
{ {
Message::Free(message); message.Free();
} }
return error; return error;
+1
View File
@@ -327,6 +327,7 @@ public:
Icmp mIcmp; Icmp mIcmp;
Udp mUdp; Udp mUdp;
MessagePool mMessagePool;
TaskletScheduler mTaskletScheduler; TaskletScheduler mTaskletScheduler;
TimerScheduler mTimerScheduler; TimerScheduler mTimerScheduler;
+1 -2
View File
@@ -872,7 +872,6 @@ ThreadError otEnable(void)
VerifyOrExit(!mEnabled, error = kThreadError_InvalidState); VerifyOrExit(!mEnabled, error = kThreadError_InvalidState);
otLogInfoApi("otEnable\n"); otLogInfoApi("otEnable\n");
Message::Init();
sIp6 = new(&sIp6Raw) Ip6::Ip6; sIp6 = new(&sIp6Raw) Ip6::Ip6;
sThreadNetif = new(&sThreadNetifRaw) ThreadNetif(*sIp6); sThreadNetif = new(&sThreadNetifRaw) ThreadNetif(*sIp6);
mEnabled = true; mEnabled = true;
@@ -1075,7 +1074,7 @@ otMessage otNewUdpMessage(void)
ThreadError otFreeMessage(otMessage aMessage) ThreadError otFreeMessage(otMessage aMessage)
{ {
return Message::Free(*static_cast<Message *>(aMessage)); return static_cast<Message *>(aMessage)->Free();
} }
uint16_t otGetMessageLength(otMessage aMessage) uint16_t otGetMessageLength(otMessage aMessage)
+5 -5
View File
@@ -213,7 +213,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -338,7 +338,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
@@ -393,7 +393,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -428,7 +428,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
@@ -624,7 +624,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
+17 -14
View File
@@ -113,13 +113,13 @@ ThreadError MeshForwarder::Stop()
while ((message = mSendQueue.GetHead()) != NULL) while ((message = mSendQueue.GetHead()) != NULL)
{ {
mSendQueue.Dequeue(*message); mSendQueue.Dequeue(*message);
Message::Free(*message); message->Free();
} }
while ((message = mReassemblyList.GetHead()) != NULL) while ((message = mReassemblyList.GetHead()) != NULL)
{ {
mReassemblyList.Dequeue(*message); mReassemblyList.Dequeue(*message);
Message::Free(*message); message->Free();
} }
mEnabled = false; mEnabled = false;
@@ -157,7 +157,7 @@ void MeshForwarder::HandleResolved(const Ip6::Address &aEid, ThreadError aError)
} }
else else
{ {
Message::Free(*cur); cur->Free();
} }
} }
} }
@@ -347,7 +347,7 @@ Message *MeshForwarder::GetDirectTransmission()
case kThreadError_Drop: case kThreadError_Drop:
case kThreadError_NoBufs: case kThreadError_NoBufs:
mSendQueue.Dequeue(*curMessage); mSendQueue.Dequeue(*curMessage);
Message::Free(*curMessage); curMessage->Free();
continue; continue;
default: default:
@@ -620,7 +620,7 @@ void MeshForwarder::HandlePollTimer()
{ {
Message *message; Message *message;
if ((message = Message::New(Message::kTypeMacDataPoll, 0)) != NULL) if ((message = mNetif.GetIp6().mMessagePool.New(Message::kTypeMacDataPoll, 0)) != NULL)
{ {
SendMessage(*message); SendMessage(*message);
otLogInfoMac("Sent poll\n"); otLogInfoMac("Sent poll\n");
@@ -1048,7 +1048,7 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame)
if (mSendMessage->GetDirectTransmission() == false && mSendMessage->IsChildPending() == false) if (mSendMessage->GetDirectTransmission() == false && mSendMessage->IsChildPending() == false)
{ {
mSendQueue.Dequeue(*mSendMessage); mSendQueue.Dequeue(*mSendMessage);
Message::Free(*mSendMessage); mSendMessage->Free();
} }
mScheduleTransmissionTask.Post(); mScheduleTransmissionTask.Post();
@@ -1079,7 +1079,7 @@ void MeshForwarder::HandleDiscoverTimer(void)
if (mScanChannel > kPhyMaxChannel) if (mScanChannel > kPhyMaxChannel)
{ {
mSendQueue.Dequeue(*mSendMessage); mSendQueue.Dequeue(*mSendMessage);
Message::Free(*mSendMessage); mSendMessage->Free();
mMac.SetChannel(mRestoreChannel); mMac.SetChannel(mRestoreChannel);
mScanning = false; mScanning = false;
mMle.HandleDiscoverComplete(); mMle.HandleDiscoverComplete();
@@ -1235,7 +1235,8 @@ void MeshForwarder::HandleMesh(uint8_t *aFrame, uint8_t aFrameLength, const Thre
meshHeader->SetHopsLeft(meshHeader->GetHopsLeft() - 1); meshHeader->SetHopsLeft(meshHeader->GetHopsLeft() - 1);
VerifyOrExit((message = Message::New(Message::kType6lowpan, 0)) != NULL, error = kThreadError_Drop); VerifyOrExit((message = mNetif.GetIp6().mMessagePool.New(Message::kType6lowpan, 0)) != NULL,
error = kThreadError_Drop);
SuccessOrExit(error = message->SetLength(aFrameLength)); SuccessOrExit(error = message->SetLength(aFrameLength));
message->Write(0, aFrameLength, aFrame); message->Write(0, aFrameLength, aFrame);
message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity); message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity);
@@ -1248,7 +1249,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
@@ -1296,7 +1297,8 @@ void MeshForwarder::HandleFragment(uint8_t *aFrame, uint8_t aFrameLength,
aFrame += fragmentHeader->GetHeaderLength(); aFrame += fragmentHeader->GetHeaderLength();
aFrameLength -= fragmentHeader->GetHeaderLength(); aFrameLength -= fragmentHeader->GetHeaderLength();
VerifyOrExit((message = Message::New(Message::kTypeIp6, 0)) != NULL, error = kThreadError_NoBufs); VerifyOrExit((message = mNetif.GetIp6().mMessagePool.New(Message::kTypeIp6, 0)) != NULL,
error = kThreadError_NoBufs);
message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity); message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity);
message->SetPanId(aMessageInfo.mPanId); message->SetPanId(aMessageInfo.mPanId);
headerLength = mLowpan.Decompress(*message, aMacSource, aMacDest, aFrame, aFrameLength, datagramLength); headerLength = mLowpan.Decompress(*message, aMacSource, aMacDest, aFrame, aFrameLength, datagramLength);
@@ -1361,7 +1363,7 @@ exit:
} }
else if (message != NULL) else if (message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
@@ -1388,7 +1390,7 @@ void MeshForwarder::HandleReassemblyTimer()
else else
{ {
mReassemblyList.Dequeue(*message); mReassemblyList.Dequeue(*message);
Message::Free(*message); message->Free();
} }
} }
@@ -1407,7 +1409,8 @@ void MeshForwarder::HandleLowpanHC(uint8_t *aFrame, uint8_t aFrameLength,
int headerLength; int headerLength;
uint16_t ip6PayloadLength; uint16_t ip6PayloadLength;
VerifyOrExit((message = Message::New(Message::kTypeIp6, 0)) != NULL, error = kThreadError_NoBufs); VerifyOrExit((message = mNetif.GetIp6().mMessagePool.New(Message::kTypeIp6, 0)) != NULL,
error = kThreadError_NoBufs);
message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity); message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity);
message->SetPanId(aMessageInfo.mPanId); message->SetPanId(aMessageInfo.mPanId);
@@ -1435,7 +1438,7 @@ exit:
} }
else if (message != NULL) else if (message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
+5 -5
View File
@@ -198,7 +198,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -426,7 +426,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -479,7 +479,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -515,7 +515,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
@@ -562,7 +562,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
+6 -6
View File
@@ -267,7 +267,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -1134,7 +1134,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return kThreadError_None; return kThreadError_None;
@@ -1182,7 +1182,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -1208,7 +1208,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -1292,7 +1292,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -2215,7 +2215,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
+10 -10
View File
@@ -497,7 +497,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -573,7 +573,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -758,7 +758,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -975,7 +975,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -1748,7 +1748,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return kThreadError_None; return kThreadError_None;
@@ -2158,7 +2158,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return kThreadError_None; return kThreadError_None;
@@ -2217,7 +2217,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return kThreadError_None; return kThreadError_None;
@@ -2266,7 +2266,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
@@ -3164,7 +3164,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
@@ -3231,7 +3231,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
+1 -1
View File
@@ -640,7 +640,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return error; return error;
+1 -1
View File
@@ -517,7 +517,7 @@ exit:
if (error != kThreadError_None && message != NULL) if (error != kThreadError_None && message != NULL)
{ {
Message::Free(*message); message->Free();
} }
} }
+6 -6
View File
@@ -478,7 +478,7 @@ exit:
if (message != NULL) if (message != NULL)
{ {
Message::Free(*message); message->Free();
} }
if (errorCode != kThreadError_None) if (errorCode != kThreadError_None)
@@ -1076,7 +1076,7 @@ exit:
if (message != NULL) if (message != NULL)
{ {
Message::Free(*message); message->Free();
} }
return errorCode; return errorCode;
@@ -3103,7 +3103,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET_INSECURE(uint8_t header, spin
unsigned int frame_len(0); unsigned int frame_len(0);
const uint8_t *meta_ptr(NULL); const uint8_t *meta_ptr(NULL);
unsigned int meta_len(0); unsigned int meta_len(0);
Message *message(Message::New(Message::kTypeIp6, 0)); Message *message(sIp6->mMessagePool.New(Message::kTypeIp6, 0));
if (message == NULL) if (message == NULL)
{ {
@@ -3139,7 +3139,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET_INSECURE(uint8_t header, spin
} }
else if (message) else if (message)
{ {
Message::Free(*message); message->Free();
} }
if (errorCode == kThreadError_None) if (errorCode == kThreadError_None)
@@ -3174,7 +3174,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET(uint8_t header, spinel_prop_k
unsigned int frame_len(0); unsigned int frame_len(0);
const uint8_t *meta_ptr(NULL); const uint8_t *meta_ptr(NULL);
unsigned int meta_len(0); unsigned int meta_len(0);
Message *message(Message::New(Message::kTypeIp6, 0)); Message *message(sIp6->mMessagePool.New(Message::kTypeIp6, 0));
if (message == NULL) if (message == NULL)
{ {
@@ -3210,7 +3210,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET(uint8_t header, spinel_prop_k
} }
else if (message) else if (message)
{ {
Message::Free(*message); message->Free();
} }
if (errorCode == kThreadError_None) if (errorCode == kThreadError_None)
+4 -4
View File
@@ -78,13 +78,13 @@ void NcpFrameBuffer::Clear(void)
while ((message = mWriteFrameMessageQueue.GetHead()) != NULL) while ((message = mWriteFrameMessageQueue.GetHead()) != NULL)
{ {
mWriteFrameMessageQueue.Dequeue(*message); mWriteFrameMessageQueue.Dequeue(*message);
Message::Free(*message); message->Free();
} }
while ((message = mMessageQueue.GetHead()) != NULL) while ((message = mMessageQueue.GetHead()) != NULL)
{ {
mMessageQueue.Dequeue(*message); mMessageQueue.Dequeue(*message);
Message::Free(*message); message->Free();
} }
if (!wasEmpty) if (!wasEmpty)
@@ -249,7 +249,7 @@ void NcpFrameBuffer::InFrameDiscard(void)
while ((message = mWriteFrameMessageQueue.GetHead()) != NULL) while ((message = mWriteFrameMessageQueue.GetHead()) != NULL)
{ {
mWriteFrameMessageQueue.Dequeue(*message); mWriteFrameMessageQueue.Dequeue(*message);
Message::Free(*message); message->Free();
} }
} }
@@ -572,7 +572,7 @@ ThreadError NcpFrameBuffer::OutFrameRemove(void)
if ((message = mMessageQueue.GetHead()) != NULL) if ((message = mMessageQueue.GetHead()) != NULL)
{ {
mMessageQueue.Dequeue(*message); mMessageQueue.Dequeue(*message);
Message::Free(*message); message->Free();
} }
} }
+2 -4
View File
@@ -117,7 +117,7 @@ void TestLowpanIphc(void)
frame.GetSrcAddr(macSource); frame.GetSrcAddr(macSource);
frame.GetDstAddr(macDest); frame.GetDstAddr(macDest);
VerifyOrQuit((message = sIp6.NewMessage(0)) != NULL, VerifyOrQuit((message = sIp6.mMessagePool.New(Message::kTypeIp6, 0)) != NULL,
"6lo: Ip6::NewMessage failed"); "6lo: Ip6::NewMessage failed");
// ===> Test Lowpan::Decompress // ===> Test Lowpan::Decompress
@@ -154,7 +154,7 @@ void TestLowpanIphc(void)
VerifyOrQuit(memcmp(frame.GetPayload(), result, static_cast<size_t>(compressBytes)) == 0, VerifyOrQuit(memcmp(frame.GetPayload(), result, static_cast<size_t>(compressBytes)) == 0,
"6lo: Lowpan::Compress failed"); "6lo: Lowpan::Compress failed");
SuccessOrQuit(Message::Free(*message), "6lo: Message:Free failed"); SuccessOrQuit(message->Free(), "6lo: Message:Free failed");
printf("PASS\n\n"); printf("PASS\n\n");
} }
@@ -165,8 +165,6 @@ void TestLowpanIphc(void)
int main(void) int main(void)
{ {
Message::Init();
TestLowpanIphc(); TestLowpanIphc();
printf("All tests passed\n"); printf("All tests passed\n");
+3 -4
View File
@@ -42,18 +42,17 @@ extern "C" void otPlatDiagAlarmFired(void)
void TestMessage(void) void TestMessage(void)
{ {
Thread::MessagePool messagePool;
Thread::Message *message; Thread::Message *message;
uint8_t writeBuffer[1024]; uint8_t writeBuffer[1024];
uint8_t readBuffer[1024]; uint8_t readBuffer[1024];
Thread::Message::Init();
for (unsigned i = 0; i < sizeof(writeBuffer); i++) for (unsigned i = 0; i < sizeof(writeBuffer); i++)
{ {
writeBuffer[i] = static_cast<uint8_t>(random()); writeBuffer[i] = static_cast<uint8_t>(random());
} }
VerifyOrQuit((message = Thread::Message::New(Thread::Message::kTypeIp6, 0)) != NULL, VerifyOrQuit((message = messagePool.New(Thread::Message::kTypeIp6, 0)) != NULL,
"Message::New failed\n"); "Message::New failed\n");
SuccessOrQuit(message->SetLength(sizeof(writeBuffer)), SuccessOrQuit(message->SetLength(sizeof(writeBuffer)),
"Message::SetLength failed\n"); "Message::SetLength failed\n");
@@ -65,7 +64,7 @@ void TestMessage(void)
"Message compare failed\n"); "Message compare failed\n");
VerifyOrQuit(message->GetLength() == 1024, VerifyOrQuit(message->GetLength() == 1024,
"Message::GetLength failed\n"); "Message::GetLength failed\n");
SuccessOrQuit(Thread::Message::Free(*message), SuccessOrQuit(message->Free(),
"Message::Free failed\n"); "Message::Free failed\n");
} }
+6 -12
View File
@@ -56,6 +56,7 @@ static const uint8_t sHelloText[] = "Hello there!";
static const uint8_t sMottoText[] = "Think good thoughts, say good words, do good deeds!"; static const uint8_t sMottoText[] = "Think good thoughts, say good words, do good deeds!";
static const uint8_t sMysteryText[] = "4871(\\):|(3$}{4|/4/2%14(\\)"; static const uint8_t sMysteryText[] = "4871(\\):|(3$}{4|/4/2%14(\\)";
static MessagePool sMessagePool;
struct CallbackContext struct CallbackContext
{ {
@@ -63,12 +64,6 @@ struct CallbackContext
uint16_t mNonEmptyCount; // Number of times BufferNonEmptyCallback is invoked. uint16_t mNonEmptyCount; // Number of times BufferNonEmptyCallback is invoked.
}; };
// Initialize the test
void InitTest(void)
{
Message::Init();
}
void BufferDidGetEmptyCallback(void *aContext, NcpFrameBuffer *aNcpBuffer) void BufferDidGetEmptyCallback(void *aContext, NcpFrameBuffer *aNcpBuffer)
{ {
CallbackContext *callbackContext = reinterpret_cast<CallbackContext *>(aContext); CallbackContext *callbackContext = reinterpret_cast<CallbackContext *>(aContext);
@@ -147,7 +142,7 @@ void WriteTestFrame1(NcpFrameBuffer &aNcpBuffer)
{ {
Message *message; Message *message;
message = Message::New(Message::kTypeIp6, 0); message = sMessagePool.New(Message::kTypeIp6, 0);
VerifyOrQuit(message != NULL, "Null Message"); VerifyOrQuit(message != NULL, "Null Message");
SuccessOrQuit(message->SetLength(sizeof(sMottoText)), "Could not set the length of message."); SuccessOrQuit(message->SetLength(sizeof(sMottoText)), "Could not set the length of message.");
message->Write(0, sizeof(sMottoText), sMottoText); message->Write(0, sizeof(sMottoText), sMottoText);
@@ -182,12 +177,12 @@ void WriteTestFrame2(NcpFrameBuffer &aNcpBuffer)
Message *message1; Message *message1;
Message *message2; Message *message2;
message1 = Message::New(Message::kTypeIp6, 0); message1 = sMessagePool.New(Message::kTypeIp6, 0);
VerifyOrQuit(message1 != NULL, "Null Message"); VerifyOrQuit(message1 != NULL, "Null Message");
SuccessOrQuit(message1->SetLength(sizeof(sMysteryText)), "Could not set the length of message."); SuccessOrQuit(message1->SetLength(sizeof(sMysteryText)), "Could not set the length of message.");
message1->Write(0, sizeof(sMysteryText), sMysteryText); message1->Write(0, sizeof(sMysteryText), sMysteryText);
message2 = Message::New(Message::kTypeIp6, 0); message2 = sMessagePool.New(Message::kTypeIp6, 0);
VerifyOrQuit(message2 != NULL, "Null Message"); VerifyOrQuit(message2 != NULL, "Null Message");
SuccessOrQuit(message2->SetLength(sizeof(sHelloText)), "Could not set the length of message."); SuccessOrQuit(message2->SetLength(sizeof(sHelloText)), "Could not set the length of message.");
message2->Write(0, sizeof(sHelloText), sHelloText); message2->Write(0, sizeof(sHelloText), sHelloText);
@@ -219,7 +214,7 @@ void WriteTestFrame3(NcpFrameBuffer &aNcpBuffer)
{ {
Message *message1; Message *message1;
message1 = Message::New(Message::kTypeIp6, 0); message1 = sMessagePool.New(Message::kTypeIp6, 0);
VerifyOrQuit(message1 != NULL, "Null Message"); VerifyOrQuit(message1 != NULL, "Null Message");
// An empty message with no content. // An empty message with no content.
@@ -344,7 +339,7 @@ void TestNcpFrameBuffer(void)
ncpBuffer.InFrameBegin(); ncpBuffer.InFrameBegin();
ncpBuffer.InFrameFeedData(sHelloText, sizeof(sHelloText)); ncpBuffer.InFrameFeedData(sHelloText, sizeof(sHelloText));
message = Message::New(Message::kTypeIp6, 0); message = sMessagePool.New(Message::kTypeIp6, 0);
VerifyOrQuit(message != NULL, "Null Message"); VerifyOrQuit(message != NULL, "Null Message");
SuccessOrQuit(message->SetLength(sizeof(sMysteryText)), "Could not set the length of message."); SuccessOrQuit(message->SetLength(sizeof(sMysteryText)), "Could not set the length of message.");
message->Write(0, sizeof(sMysteryText), sMysteryText); message->Write(0, sizeof(sMysteryText), sMysteryText);
@@ -475,7 +470,6 @@ void TestNcpFrameBuffer(void)
int main(void) int main(void)
{ {
Thread::InitTest();
Thread::TestNcpFrameBuffer(); Thread::TestNcpFrameBuffer();
printf("\nAll tests passed.\n"); printf("\nAll tests passed.\n");
return 0; return 0;