[libcamera-devel] [PATCH 01/11] libcamera: log: Add a LogFatal log level

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun Jan 6 12:05:38 CET 2019


Hi Laurent,

Thanks for your work.

On 2019-01-06 04:33:18 +0200, Laurent Pinchart wrote:
> The LogFatal log level is similar to the LogError level, but
> additionally abort program execution. This is useful to implement
> assertion handlers.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> ---
>  src/libcamera/include/log.h |  2 ++
>  src/libcamera/log.cpp       | 19 +++++++++++++++----
>  2 files changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/src/libcamera/include/log.h b/src/libcamera/include/log.h
> index 74439848c6ca..03842be02d0e 100644
> --- a/src/libcamera/include/log.h
> +++ b/src/libcamera/include/log.h
> @@ -16,6 +16,7 @@ enum LogSeverity {
>  	LogInfo,
>  	LogWarning,
>  	LogError,
> +	LogFatal,
>  };
>  
>  class LogMessage
> @@ -30,6 +31,7 @@ public:
>  
>  private:
>  	std::ostringstream msgStream;
> +	LogSeverity severity_;
>  };
>  
>  #define LOG(severity) LogMessage(__FILE__, __LINE__, Log##severity).stream()
> diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp
> index 44b3a5bbe279..a5823c64eaa6 100644
> --- a/src/libcamera/log.cpp
> +++ b/src/libcamera/log.cpp
> @@ -6,6 +6,7 @@
>   */
>  
>  #include <cstdio>
> +#include <cstdlib>
>  #include <ctime>
>  #include <iomanip>
>  #include <string.h>
> @@ -31,6 +32,8 @@ namespace libcamera {
>   * Warning message, signals a potential issue
>   * \var LogError
>   * Error message, signals an unrecoverable issue
> + * \var LogFatal
> + * Fatal message, signals an unrecoverable issue and aborts execution
>   */
>  
>  /**
> @@ -40,15 +43,19 @@ namespace libcamera {
>   * Return an std::ostream reference to which a message can be logged using the
>   * iostream API. The \a severity controls whether the message is printed or
>   * dropped, depending on the global log level.
> + *
> + * If the severity is set to Fatal, execution is aborted and the program
> + * terminates immediately after printing the message.
>   */
>  
>  static const char *log_severity_name(LogSeverity severity)
>  {
>  	static const char * const names[] = {
> -		" DBG",
> -		"INFO",
> -		"WARN",
> -		" ERR",
> +		"  DBG",
> +		" INFO",
> +		" WARN",
> +		"  ERR",
> +		"FATAL",
>  	};
>  
>  	if (static_cast<unsigned int>(severity) < ARRAY_SIZE(names))
> @@ -73,6 +80,7 @@ static const char *log_severity_name(LogSeverity severity)
>   */
>  LogMessage::LogMessage(const char *fileName, unsigned int line,
>  		       LogSeverity severity)
> +	: severity_(severity)
>  {
>  	/* Log the timestamp, severity and file information. */
>  	struct timespec timestamp;
> @@ -93,6 +101,9 @@ LogMessage::~LogMessage()
>  	std::string msg(msgStream.str());
>  	fwrite(msg.data(), msg.size(), 1, stderr);
>  	fflush(stderr);
> +
> +	if (severity_ == LogSeverity::LogFatal)
> +		std::abort();
>  }
>  
>  /**
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list