Add support for 0-length message queues.

This commit is contained in:
W. Eric Norum
2003-02-28 16:14:10 +00:00
parent 17624a28c3
commit a1a6e8861e
3 changed files with 60 additions and 26 deletions

View File

@@ -40,6 +40,17 @@ randBelow(int n)
return (int)((double)n*rand()/(RAND_MAX+1.0));
}
static void
receiver0(void *arg)
{
epicsMessageQueue *q = (epicsMessageQueue *)arg;
char cbuf[80];
assert(q->receive(cbuf) == 5);
assert(q->receive(cbuf) == 0);
delete q;
}
static void
receiver(void *arg)
{
@@ -200,17 +211,26 @@ epicsMessageQueueTest()
assert (q1->receive((void *)cbuf, 1.0) < 0);
assert(q1->pending() == 0);
/*
* Single receiver, single sender, 0-length queue
*/
epicsMessageQueue *q0 = new epicsMessageQueue(0, 20);
epicsThreadCreate("Receiver zero", epicsThreadPriorityMedium, epicsThreadStackMedium, receiver0, q0);
epicsThreadSleep(1.0);
assert(q0->trySend((void *)msg1, 5) == 0);
epicsThreadSleep(1.0);
assert(q0->trySend((void *)msg1, 0) == 0);
epicsThreadSleep(1.0);
/*
* Single receiver, single sender tests
*/
epicsThreadSetPriority(epicsThreadGetIdSelf(), epicsThreadPriorityHigh);
epicsThreadCreate("Receiver one", epicsThreadPriorityMedium, epicsThreadStackMedium, receiver, q1);
for (pass = 1 ; pass <= 3 ; pass++) {
epicsThreadSetPriority(epicsThreadGetIdSelf(), pass == 1 ?
epicsThreadPriorityHigh :
epicsThreadPriorityLow);
switch (pass) {
case 1: printf ("Should send/receive only 4 messages (sender priority > receiver priority).\n"); break;
case 2: printf ("Should send/receive 4 to 10 messages (depends on how host handles thread priorities).\n"); break;
case 2: printf ("Should send/receive 5 to 10 messages (depends on how host handles thread priorities).\n"); break;
case 3: printf ("Should send/receive 10 messages (sender pauses after sending).\n"); break;
}
for (i = 0 ; i < 10 ; i++) {
@@ -220,6 +240,7 @@ epicsMessageQueueTest()
epicsThreadSleep(0.5);
}
printf ("Sent %d messages.\n", i);
epicsThreadSetPriority(epicsThreadGetIdSelf(), epicsThreadPriorityLow);
epicsThreadSleep(1.0);
}