CI instability: FATAL error: warn stream not initialized for 6039 - maybe buffer overrun? #798
This commit is contained in:
parent
56ff75004b
commit
ee674dc979
|
@ -89,19 +89,27 @@ void chDbgPanic3(const char *msg, const char * file, int line) {
|
||||||
|
|
||||||
// todo: look into chsnprintf
|
// todo: look into chsnprintf
|
||||||
// todo: move to some util file & reuse for 'firmwareError' method
|
// 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
|
stream->eos = 0; // reset
|
||||||
chvprintf((BaseSequentialStream *) stream, fmt, ap);
|
chvprintf((BaseSequentialStream *) stream, fmt, ap);
|
||||||
stream->buffer[stream->eos] = 0;
|
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?
|
resetLogging(&logger); // todo: is 'reset' really needed here?
|
||||||
appendMsgPrefix(&logger);
|
appendMsgPrefix(&logger);
|
||||||
|
|
||||||
logger.append(WARNING_PREFIX);
|
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);
|
logger.append(warningBuffer);
|
||||||
append(&logger, DELIMETER);
|
append(&logger, DELIMETER);
|
||||||
|
@ -141,7 +149,7 @@ bool warning(obd_code_e code, const char *fmt, ...) {
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
printWarning(fmt, ap);
|
printWarning(code, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
#else
|
#else
|
||||||
// todo: we need access to 'engine' here so that we can migrate to real 'engine->engineState.warnings'
|
// 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
|
#ifdef EFI_PRINT_ERRORS_AS_WARNINGS
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
printWarning(fmt, ap);
|
printWarning(code, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
#endif
|
#endif
|
||||||
ON_FATAL_ERROR()
|
ON_FATAL_ERROR()
|
||||||
|
|
Loading…
Reference in New Issue