CI instability: FATAL error: warn stream not initialized for 6039 - maybe buffer overrun? #798

This commit is contained in:
rusefi 2019-11-23 16:41:59 -05:00
parent 56ff75004b
commit ee674dc979
1 changed files with 13 additions and 5 deletions

View File

@ -89,19 +89,27 @@ void chDbgPanic3(const char *msg, const char * file, int line) {
// todo: look into chsnprintf
// todo: move to some util file & reuse for 'firmwareError' method
static void printToStream(MemoryStream *stream, const char *fmt, va_list ap) {
/**
* @returns number of buffer bytes used
*/
static int printToStream(MemoryStream *stream, const char *fmt, va_list ap) {
stream->eos = 0; // reset
chvprintf((BaseSequentialStream *) stream, fmt, ap);
stream->buffer[stream->eos] = 0;
return stream->eos + 1;
}
static void printWarning(const char *fmt, va_list ap) {
static void printWarning(obd_code_e code, const char *fmt, va_list ap) {
resetLogging(&logger); // todo: is 'reset' really needed here?
appendMsgPrefix(&logger);
logger.append(WARNING_PREFIX);
printToStream(&warningStream, fmt, ap);
int bufferUsage = printToStream(&warningStream, fmt, ap);
if (bufferUsage > WARNING_BUFFER_SIZE) {
firmwareError(CUSTOM_ERR_ASSERT, "stream overrun with %d", code);
return;
}
logger.append(warningBuffer);
append(&logger, DELIMETER);
@ -141,7 +149,7 @@ bool warning(obd_code_e code, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
printWarning(fmt, ap);
printWarning(code, fmt, ap);
va_end(ap);
#else
// todo: we need access to 'engine' here so that we can migrate to real 'engine->engineState.warnings'
@ -217,7 +225,7 @@ void firmwareError(obd_code_e code, const char *fmt, ...) {
#ifdef EFI_PRINT_ERRORS_AS_WARNINGS
va_list ap;
va_start(ap, fmt);
printWarning(fmt, ap);
printWarning(code, fmt, ap);
va_end(ap);
#endif
ON_FATAL_ERROR()