From 8a6337c40274f50c6952f6b6b6406ff96197ffbb Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Tue, 14 Sep 1993 16:34:57 +0000 Subject: [PATCH] prevent error message storms --- src/db/callback.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/db/callback.c b/src/db/callback.c index 2e807f442..deb6630f6 100644 --- a/src/db/callback.c +++ b/src/db/callback.c @@ -51,6 +51,7 @@ static SEM_ID callbackSem[NUM_CALLBACK_PRIORITIES]; static RING_ID callbackQ[NUM_CALLBACK_PRIORITIES]; static int callbackTaskId[NUM_CALLBACK_PRIORITIES]; +static int ringOverflow[NUM_CALLBACK_PRIORITIES]; volatile int callbackRestart=FALSE; /* forward references */ @@ -82,10 +83,14 @@ void callbackRequest(CALLBACK *pcallback) logMsg("callbackRequest called with invalid priority\n",0,0,0,0,0,0); return; } + if(ringOverflow[priority]) return; lockKey = intLock(); nput = rngBufPut(callbackQ[priority],(void *)&pcallback,sizeof(pcallback)); intUnlock(lockKey); - if(nput!=sizeof(pcallback)) errMessage(-1,"callbackRequest ring buffer full"); + if(nput!=sizeof(pcallback)){ + logMsg("callbackRequest ring buffer full\n",0,0,0,0,0,0); + ringOverflow[priority] = TRUE; + } if((status=semGive(callbackSem[priority]))!=OK) { /*semGive randomly returns garbage value*/ /* @@ -102,6 +107,7 @@ void callbackRequest(CALLBACK *pcallback) volatile CALLBACK *pcallback; int nget; + ringOverflow[priority] = FALSE; while(TRUE) { /* wait for somebody to wake us up */ if(semTake(callbackSem[priority],WAIT_FOREVER)!=OK ){ @@ -114,6 +120,7 @@ void callbackRequest(CALLBACK *pcallback) errMessage(0,"rngBufGet failed in callbackTask"); taskSuspend(0); } + ringOverflow[priority] = FALSE; (*pcallback->callback)(pcallback); } }