From b916c750d7bb0571e98d7a66b81dbf4a889d665a Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Tue, 15 Feb 2005 20:02:01 +0000 Subject: [PATCH] do not call vfprintf twice in same routine. powerPC crashes --- src/libCom/error/errlog.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/libCom/error/errlog.c b/src/libCom/error/errlog.c index 8de26f9b2..05a1d67c8 100644 --- a/src/libCom/error/errlog.c +++ b/src/libCom/error/errlog.c @@ -114,6 +114,7 @@ epicsShareFunc int errlogPrintf( const char *pFormat, ...) { va_list pvar; int nchar; + int isOkToBlock = epicsThreadIsOkToBlock(); if(epicsInterruptIsInterruptContext()) { epicsInterruptContextMessage @@ -121,6 +122,12 @@ epicsShareFunc int errlogPrintf( const char *pFormat, ...) return 0; } errlogInit(0); + if(pvtData.atExit || (isOkToBlock && pvtData.toConsole)) { + va_start(pvar, pFormat); + vfprintf(stdout,pFormat,pvar); + va_end (pvar); + fflush(stdout); + } va_start(pvar, pFormat); nchar = errlogVprintf(pFormat,pvar); va_end (pvar); @@ -140,10 +147,6 @@ epicsShareFunc int errlogVprintf( return 0; } errlogInit(0); - if(pvtData.atExit || (isOkToBlock && pvtData.toConsole)) { - vfprintf(stdout,pFormat,pvar); - fflush(stdout); - } if(pvtData.atExit) return 0; pbuffer = msgbufGetFree(isOkToBlock); if(!pbuffer) return(0); @@ -200,6 +203,7 @@ epicsShareFunc int errlogSevPrintf( { va_list pvar; int nchar; + int isOkToBlock = epicsThreadIsOkToBlock(); if(epicsInterruptIsInterruptContext()) { epicsInterruptContextMessage @@ -208,6 +212,13 @@ epicsShareFunc int errlogSevPrintf( } errlogInit(0); if(pvtData.sevToLog>severity) return(0); + if(pvtData.atExit || (isOkToBlock && pvtData.toConsole)) { + fprintf(stdout,"sevr=%s ",errlogGetSevEnumString(severity)); + va_start(pvar, pFormat); + vfprintf(stdout,pFormat,pvar); + va_end (pvar); + fflush(stdout); + } va_start(pvar, pFormat); nchar = errlogSevVprintf(severity,pFormat,pvar); va_end (pvar); @@ -229,11 +240,6 @@ epicsShareFunc int errlogSevVprintf( return 0; } errlogInit(0); - if(pvtData.atExit || (isOkToBlock && pvtData.toConsole)) { - fprintf(stdout,"sevr=%s ",errlogGetSevEnumString(severity)); - vfprintf(stdout,pFormat,pvar); - fflush(stdout); - } if(pvtData.atExit) return 0; pnext = msgbufGetFree(isOkToBlock); if(!pnext) return(0);