BugFix: EventQue wait() doesn't work correct.

Update: add EventQue Test.


Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
tomoaki
2016-10-21 21:05:49 +09:00
parent e2cf453c6b
commit 3c9b7d283b
5 changed files with 51 additions and 12 deletions

View File

@@ -315,7 +315,10 @@ void EventQue::setMaxSize(uint16_t maxSize)
Event* EventQue::wait(void)
{
Event* ev;
_sem.wait();
if ( _que.size() == 0 )
{
_sem.wait();
}
_mutex.lock();
ev = _que.front();
_que.pop();
@@ -326,7 +329,10 @@ Event* EventQue::wait(void)
Event* EventQue::timedwait(uint16_t millsec)
{
Event* ev;
_sem.timedwait(millsec);
if ( _que.size() == 0 )
{
_sem.timedwait(millsec);
}
_mutex.lock();
if (_que.size() == 0)
@@ -338,11 +344,6 @@ Event* EventQue::timedwait(uint16_t millsec)
{
ev = _que.front();
_que.pop();
if ( !ev )
{
ev = new Event();
ev->setTimeout();
}
}
_mutex.unlock();
return ev;

View File

@@ -18,6 +18,8 @@
#include <cassert>
#include "TestProcessFramework.h"
#include "MQTTSNGWProcess.h"
#include "MQTTSNGWClient.h"
#include "MQTTSNGWPacket.h"
#include "Timer.h"
using namespace std;
@@ -65,7 +67,7 @@ void TestProcessFramework::run(void)
{
putLog("Test RingBuffer %d ", 1234567890);
}
putLog("\n\nRingBuffer Test complieted. Enter CTRL+C\n");
putLog("\n\nRingBuffer Test complieted.\n");
for ( i = 0; i < 10; i++ )
{
@@ -114,6 +116,19 @@ void TestProcessFramework::run(void)
while (!tm.isTimeup(1000));
printf("%s Timer 1sec\n", currentDateTime());
printf("EventQue test start.\n");
Client* client = new Client();
_evQue.setMaxSize(EVENT_CNT);
for ( int i = 0; i < EVENT_CNT + 4; i++ )
{
Event* ev = new Event();
MQTTSNPacket* packet = new MQTTSNPacket();
packet->setDISCONNECT(i);
ev->setClientSendEvent(client, packet);
_evQue.post(ev);
}
MultiTaskProcess::run();
printf("ProcessFramework test complited.\n");

View File

@@ -17,8 +17,8 @@
#define TESTPROCESSFRAMEWORK_H_
#include "MQTTSNGWProcess.h"
#include "MQTTSNGateway.h"
#define EVENT_CNT 10
namespace MQTTSNGW
{
class TestProcessFramework: public MultiTaskProcess{
@@ -27,9 +27,10 @@ public:
~TestProcessFramework();
virtual void initialize(int argc, char** argv);
void run(void);
EventQue* getEventQue(void) { return &_evQue; }
private:
EventQue _evQue;
};
class TestQue

View File

@@ -14,6 +14,7 @@
* Tomoaki Yamaguchi - initial API and implementation
**************************************************************************************/
#include <unistd.h>
#include <cassert>
#include "TestTask.h"
#include "Threading.h"
@@ -23,6 +24,7 @@ using namespace MQTTSNGW;
TestTask::TestTask(TestProcessFramework* proc)
{
proc->attach((Thread*)this);
_proc = proc;
}
TestTask::~TestTask()
@@ -37,6 +39,26 @@ void TestTask::initialize(int argc, char** argv)
void TestTask::run(void)
{
EventQue* evQue = _proc->getEventQue();
uint16_t duration = 0;
int cnt = 0;
while (true)
{
Event* ev = evQue->timedwait(5000);
if ( ev->getEventType() == EtTimeout )
{
assert(EVENT_CNT == cnt);
delete ev;
break;
}
cnt++;
MQTTSNPacket* packet = ev->getMQTTSNPacket();
packet->getDISCONNECT(&duration);
printf("Event %d\n", duration);
delete ev;
}
while(true)
{
if ( CHK_SIGINT)

View File

@@ -33,7 +33,7 @@ public:
void run(void);
private:
TestProcessFramework* _proc;
};
}