mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-13 15:36:51 +01:00
BugFix: EventQue wait() doesn't work correct.
Update: add EventQue Test. Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
void run(void);
|
||||
|
||||
private:
|
||||
|
||||
TestProcessFramework* _proc;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user