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