From 4982a6308b7ec4977f58afa7a4bcb9d3dfac2c40 Mon Sep 17 00:00:00 2001
From: Andrew Johnson <anj@aps.anl.gov>
Date: Fri, 4 May 2012 17:34:48 -0500
Subject: [PATCH] db: Don't call epicsPrintf() from callbackRequest()

The callbackRequest() routine can be called from an ISR,
so use epicsInterruptContextMessage() to print errors.
---
 src/db/callback.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/db/callback.c b/src/db/callback.c
index c3d4c59fe6..4e364b1813 100644
--- a/src/db/callback.c
+++ b/src/db/callback.c
@@ -17,6 +17,7 @@
 #include <stddef.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 
 #include "cantProceed.h"
 #include "dbDefs.h"
@@ -152,12 +153,12 @@ void callbackRequest(CALLBACK *pcallback)
     int lockKey;
 
     if (!pcallback) {
-        epicsPrintf("callbackRequest called with NULL pcallback\n");
+        epicsInterruptContextMessage("callbackRequest: pcallback was NULL\n");
         return;
     }
     priority = pcallback->priority;
     if (priority < 0 || priority >= NUM_CALLBACK_PRIORITIES) {
-        epicsPrintf("callbackRequest called with invalid priority\n");
+        epicsInterruptContextMessage("callbackRequest: Bad priority\n");
         return;
     }
     if (ringOverflow[priority]) return;
@@ -167,8 +168,11 @@ void callbackRequest(CALLBACK *pcallback)
     epicsInterruptUnlock(lockKey);
 
     if (!pushOK) {
-        errlogPrintf("callbackRequest: %s ring buffer full\n",
-            threadName[priority]);
+        char msg[48] = "callbackRequest: ";
+
+        strcat(msg, threadName[priority]);
+        strcat(msg, " ring buffer full\n");
+        epicsInterruptContextMessage(msg);
         ringOverflow[priority] = TRUE;
     }
     epicsEventSignal(callbackSem[priority]);
-- 
GitLab