changes callbacks to use locked ring buffer

This commit is contained in:
2020-05-12 12:13:06 +02:00
parent d94e0097a6
commit a9a975b1e4
+1 -6
View File
@@ -110,9 +110,7 @@ static void callbackShutdown(void *arg)
int i;
for (i = 0; i < NUM_CALLBACK_PRIORITIES; i++) {
int lockKey = epicsInterruptLock();
int ok = epicsRingPointerPush(callbackQ[i], &exitCallback);
epicsInterruptUnlock(lockKey);
epicsEventSignal(callbackSem[i]);
if (ok) epicsEventWait(startStopEvent);
}
@@ -128,7 +126,7 @@ static void callbackInitOnce(void *arg)
epicsThreadId tid;
callbackSem[i] = epicsEventMustCreate(epicsEventEmpty);
callbackQ[i] = epicsRingPointerCreate(callbackQueueSize);
callbackQ[i] = epicsRingPointerLockedCreate(callbackQueueSize);
if (callbackQ[i] == 0)
cantProceed("epicsRingPointerCreate failed for %s\n",
threadName[i]);
@@ -154,7 +152,6 @@ void callbackRequest(CALLBACK *pcallback)
{
int priority;
int pushOK;
int lockKey;
if (!pcallback) {
epicsInterruptContextMessage("callbackRequest: pcallback was NULL\n");
@@ -167,9 +164,7 @@ void callbackRequest(CALLBACK *pcallback)
}
if (ringOverflow[priority]) return;
lockKey = epicsInterruptLock();
pushOK = epicsRingPointerPush(callbackQ[priority], pcallback);
epicsInterruptUnlock(lockKey);
if (!pushOK) {
epicsInterruptContextMessage(fullMessage[priority]);