From 857c4a9545a7a1d2d19548bc64c16c1744fcd785 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Thu, 5 Apr 2001 14:32:50 +0000 Subject: [PATCH] add errlogStop; remove old sytle C function prototypes --- src/libCom/error/errlog.c | 15 +++++++++++++++ src/libCom/error/errlog.h | 38 +++----------------------------------- 2 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/libCom/error/errlog.c b/src/libCom/error/errlog.c index 446c21a56..8d61993ce 100644 --- a/src/libCom/error/errlog.c +++ b/src/libCom/error/errlog.c @@ -72,11 +72,13 @@ typedef struct msgNode { LOCAL struct { epicsEventId errlogTaskWaitForWork; + epicsEventId errlogStopWaitForStop; epicsMutexId msgQueueLock; epicsMutexId listenerLock; ELLLIST listenerList; ELLLIST msgQueue; msgNode *pnextSend; + int stopNow; int errlogInitFailed; int buffersize; int sevToLog; @@ -310,6 +312,7 @@ static void errlogInitPvt(void *arg) ellInit(&pvtData.msgQueue); pvtData.toConsole = TRUE; pvtData.errlogTaskWaitForWork = epicsEventMustCreate(epicsEventEmpty); + pvtData.errlogStopWaitForStop = epicsEventMustCreate(epicsEventEmpty); pvtData.listenerLock = epicsMutexMustCreate(); pvtData.msgQueueLock = epicsMutexMustCreate(); /*Allow an extra MAX_MESSAGE_SIZE for extra margain of safety*/ @@ -333,6 +336,13 @@ epicsShareFunc int epicsShareAPI errlogInit(int bufsize) return(0); } +epicsShareFunc void epicsShareAPI errlogStop(void) +{ + pvtData.stopNow = 1; + epicsEventSignal(pvtData.errlogTaskWaitForWork); + epicsEventMustWait(pvtData.errlogStopWaitForStop); +} + LOCAL void errlogTask(void) { listenerNode *plistenerNode; @@ -352,6 +362,11 @@ LOCAL void errlogTask(void) epicsMutexUnlock(pvtData.listenerLock); msgbufFreeSend(); } + if(!pvtData.stopNow) continue; + epicsThreadSleep(.2); /*just wait an extra .2 seconds*/ + /*SHOULD HAVE WAY OF NOTIFYING LISTENERS*/ + epicsEventSignal(pvtData.errlogStopWaitForStop); + break; } } diff --git a/src/libCom/error/errlog.h b/src/libCom/error/errlog.h index 463b269cd..0f068fbc2 100644 --- a/src/libCom/error/errlog.h +++ b/src/libCom/error/errlog.h @@ -13,26 +13,14 @@ of this distribution. #ifndef INCerrlogh #define INCerrlogh - +#include #include "shareLib.h" #ifdef __cplusplus extern "C" { -#define epicsPrintUseProtoANSI #endif -#ifdef __STDC__ -#ifndef epicsPrintUseProtoANSI -#define epicsPrintUseProtoANSI -#endif -#endif - -#ifdef epicsPrintUseProtoANSI -# include -#else -# include -#endif /* define errMessage with a macro so we can print the file and line number*/ #define errMessage(S, PM) \ @@ -41,11 +29,8 @@ extern "C" { #define epicsPrintf errlogPrintf #define epicsVprintf errlogVprintf -#ifdef __STDC__ typedef void(*errlogListener) (void *pPrivate, const char *message); -#else -typedef void(*errlogListener) (); -#endif + typedef enum {errlogInfo,errlogMinor,errlogMajor,errlogFatal} errlogSevEnum; #ifdef ERRLOG_INIT @@ -54,8 +39,6 @@ epicsShareDef char * errlogSevEnumString[] = {"info","minor","major","fatal"}; epicsShareExtern char * errlogSevEnumString[]; #endif -#ifdef epicsPrintUseProtoANSI - epicsShareFunc int epicsShareAPIV errlogPrintf( const char *pformat, ...); epicsShareFunc int epicsShareAPIV errlogVprintf( @@ -80,27 +63,12 @@ epicsShareFunc void epicsShareAPI errlogRemoveListener( epicsShareFunc int epicsShareAPI eltc(int yesno); epicsShareFunc int epicsShareAPI errlogInit(int bufsize); +epicsShareFunc void epicsShareAPI errlogStop(void); /*other routines that write to log file*/ epicsShareFunc void epicsShareAPIV errPrintf(long status, const char *pFileName, int lineno, const char *pformat, ...); -#else /* not epicsPrintUseProtoANSI */ -epicsShareFunc int epicsShareAPI errlogPrintf(); -epicsShareFunc int epicsShareAPI errlogVprintf(); -epicsShareFunc int epicsShareAPI errlogSevPrintf(); -epicsShareFunc int epicsShareAPI errlogSevVprintf(); -epicsShareFunc int epicsShareAPI errlogMessage(); -epicsShareFunc char * epicsShareAPI errlogGetSevEnumString(); -epicsShareFunc void epicsShareAPI errlogSetSevToLog(); -epicsShareFunc errlogSevEnum epicsShareAPI errlogGetSevToLog(); -epicsShareFunc void epicsShareAPI errlogAddListener(); -epicsShareFunc void epicsShareAPI errlogRemoveListener(); -epicsShareFunc void epicsShareAPI eltc(); -epicsShareFunc void epicsShareAPI errlogInit(); -epicsShareFunc void epicsShareAPI errPrintf(); -#endif /* ifdef epicsPrintUseProtoANSI */ - epicsShareExtern int errVerbose; #ifdef __cplusplus