Make sure #798 is good and dead (#1028)

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

This reverts commit ee674dc979.

* Revert "CI instability: FATAL error: warn stream not initialized for 6039 #798"

This reverts commit 3bf29b6963.

* fix correctly

* use correct function
This commit is contained in:
Matthew Kennedy 2019-11-23 18:25:29 -08:00 committed by rusefi
parent af60a46229
commit 2460a309ae
1 changed files with 11 additions and 16 deletions

View File

@ -16,7 +16,7 @@ static MemoryStream warningStream;
static MemoryStream firmwareErrorMessageStream; static MemoryStream firmwareErrorMessageStream;
#endif /* EFI_SIMULATOR || EFI_PROD_CODE */ #endif /* EFI_SIMULATOR || EFI_PROD_CODE */
#define WARNING_BUFFER_SIZE 81 #define WARNING_BUFFER_SIZE 80
static char warningBuffer[WARNING_BUFFER_SIZE]; static char warningBuffer[WARNING_BUFFER_SIZE];
static volatile bool isWarningStreamInitialized = false; static volatile bool isWarningStreamInitialized = false;
@ -89,27 +89,22 @@ 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;
return stream->eos + 1; // Terminate, but don't write past the end of the buffer
int terminatorLocation = minI(stream->eos, stream->size - 1);
stream->buffer[terminatorLocation] = '\0';
} }
static void printWarning(obd_code_e code, const char *fmt, va_list ap) { static void printWarning(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);
int bufferUsage = printToStream(&warningStream, fmt, ap); 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);
@ -149,7 +144,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(code, fmt, ap); printWarning(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'
@ -211,7 +206,7 @@ void onUnlockHook(void) {
*/ */
void initErrorHandlingDataStructures(void) { void initErrorHandlingDataStructures(void) {
#if EFI_SIMULATOR || EFI_PROD_CODE #if EFI_SIMULATOR || EFI_PROD_CODE
msObjectInit(&warningStream, (uint8_t *) warningBuffer, WARNING_BUFFER_SIZE - 1, 0); msObjectInit(&warningStream, (uint8_t *) warningBuffer, WARNING_BUFFER_SIZE, 0);
msObjectInit(&firmwareErrorMessageStream, errorMessageBuffer, sizeof(errorMessageBuffer), 0); msObjectInit(&firmwareErrorMessageStream, errorMessageBuffer, sizeof(errorMessageBuffer), 0);
#endif #endif
isWarningStreamInitialized = true; isWarningStreamInitialized = true;
@ -225,7 +220,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(code, fmt, ap); printWarning(fmt, ap);
va_end(ap); va_end(ap);
#endif #endif
ON_FATAL_ERROR() ON_FATAL_ERROR()