Fixing "Abort message: '[FATAL:decoder_stream.cc(524)] OnDecodeDone<audio>: 0" in dev/debug
Dev and debug versions throw DCHECK in OnDecodeDone due to wrong syntax of logging statement:
```
FUNCTION_DVLOG(status.is_ok() ? 3 : 1) << ": " << status.code();
```
The FUNCTION_DVLOG is defined as follows:
```
DVLOG(level) << __func__ << "<" << GetStreamTypeString() << ">"
```
The issue is that the condition "status.is_ok() ? 3 : 1" should become "level", but in reality, since there are no braces around it, it gets parsed incorrectly and the number "3" becomes a severity level (see base/logging.h), which corresponds to "FATAL" severity level, which ends up which crash / assert.
Here is the code after preprocessor for that line 524 BEFORE the fix:
!(((status.is_ok() ? 3 : 1) <= ::logging::GetVlogLevel("../../media/filters/decoder_stream.cc")) && (true)) ? (void) 0 : ::logging::LogMessageVoidify() & (::logging::LogMessage("../../media/filters/decoder_stream.cc", 524, -status.is_ok() ? 3 : 1).stream()) << __func__ << "<" << GetStreamTypeString() << ">" << ": " << status.code();
and this is the fixed version:
!((((status.is_ok() ? 3 : 1)) <= ::logging::GetVlogLevel("../../media/filters/decoder_stream.cc")) && (true)) ? (void) 0 : ::logging::LogMessageVoidify() & (::logging::LogMessage("../../media/filters/decoder_stream.cc", 524, -(status.is_ok() ? 3 : 1)).stream()) << __func__ << "<" << GetStreamTypeString() << ">" << ": " << status.code();
Pay attention to this part:
LogMessage("../../media/filters/decoder_stream.cc", 524, -status.is_ok() ? 3 : 1).stream())
and
LogMessage("../../media/filters/decoder_stream.cc", 524, -(status.is_ok() ? 3 : 1)).stream())
So, basically, before the fix the negative sign is applied to the wrong statement, therefore the LogMessage will get +3 instead of -3. +3 means FATAL, while -3 means verbosity level 3, as far as I understand.
Fixed: 1157701, 1156942
Change-Id: I3132dde1dbd7d18460b74715016b74228e52ad7a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2586656
Reviewed-by: danakj <[email protected]>
Reviewed-by: François Doray <[email protected]>
Reviewed-by: Dale Curtis <[email protected]>
Commit-Queue: Artem Bolgar <[email protected]>
Cr-Commit-Position: refs/heads/master@{#836357}
diff --git a/base/logging.h b/base/logging.h
index a9a1198..ee1aed5d 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -454,7 +454,7 @@
// The VLOG macros log with negative verbosities.
#define VLOG_STREAM(verbose_level) \
- ::logging::LogMessage(__FILE__, __LINE__, -verbose_level).stream()
+ ::logging::LogMessage(__FILE__, __LINE__, -(verbose_level)).stream()
#define VLOG(verbose_level) \
LAZY_STREAM(VLOG_STREAM(verbose_level), VLOG_IS_ON(verbose_level))
@@ -465,11 +465,11 @@
#if defined (OS_WIN)
#define VPLOG_STREAM(verbose_level) \
- ::logging::Win32ErrorLogMessage(__FILE__, __LINE__, -verbose_level, \
+ ::logging::Win32ErrorLogMessage(__FILE__, __LINE__, -(verbose_level), \
::logging::GetLastSystemErrorCode()).stream()
#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
#define VPLOG_STREAM(verbose_level) \
- ::logging::ErrnoLogMessage(__FILE__, __LINE__, -verbose_level, \
+ ::logging::ErrnoLogMessage(__FILE__, __LINE__, -(verbose_level), \
::logging::GetLastSystemErrorCode()).stream()
#endif