[libcamera-devel] [PATCH] Documentation: coding-style: Document error handling rules
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Oct 29 16:30:04 CEST 2021
Hi Laurent,
Quoting Laurent Pinchart (2021-10-27 23:59:51)
> Following a conversation on the mailing list about the use of
> assertions, document the error handling strategy in libcamera. This is
> an initial set of rules that are expected be extended and detailed in
> the future.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Sounds like a pretty good explanation and worth adding to me.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
I wonder if we might expand that we consider even LOG(Fatal) should
return rather than continue as it may not fire an assertion in release
builds.
But that's not a specific worry right now.
> ---
> Documentation/coding-style.rst | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/Documentation/coding-style.rst b/Documentation/coding-style.rst
> index ef3a0d1714ab..4e8d6988fef8 100644
> --- a/Documentation/coding-style.rst
> +++ b/Documentation/coding-style.rst
> @@ -217,6 +217,36 @@ global variable, should run a minimal amount of code in the constructor and
> destructor, and code that contains dependencies should be moved to a later
> point in time.
>
> +Error Handling
> +~~~~~~~~~~~~~~
> +
> +Proper error handling is crucial to the stability of libcamera. The project
> +follows a set of high-level rules:
> +
> +* Make errors impossible through API design. The best way to handle errors is
> + to prevent them from happening in the first place. The preferred option is
> + thus to prevent error conditions at the API design stage when possible.
> +* Detect errors at compile time. Compile-test checking of errors not only
> + reduces the runtime complexity, but also ensures that errors are caught early
> + on during development instead of during testing or, worse, in production. The
> + static_assert() declaration should be used where possible for this purpose.
> +* Validate all external API contracts. Explicit pre-condition checks shall be
> + used to validate API contracts. Whenever possible, appropriate errors should
> + be returned directly. As libcamera doesn't use exceptions, errors detected in
> + constructors shall result in the constructed object being marked as invalid,
> + with a public member function available to check validity. The checks should
> + be thorough for the public API, and may be lighter for internal APIs when
> + pre-conditions can reasonably be considered to be met through other means.
> +* Use assertions for fatal issues only. The ASSERT() macro causes a program
> + abort when compiled in debug mode, and is a no-op otherwise. It is useful to
> + abort execution synchronously with the error check instead of letting the
> + error cause problems (such as segmentation faults) later, and to provide a
> + detailed backtrace. Assertions shall only be used to catch conditions that are
> + never supposed to happen without a serious bug in libcamera that would prevent
> + safe recovery. They shall never be used to validate API contracts. The
> + assertion conditions shall not cause any side effect as they are compiled out
> + in non-debug mode.
> +
> C Compatibility Headers
> ~~~~~~~~~~~~~~~~~~~~~~~
>
>
> base-commit: 76bd9f3d80cb99a3391832b644b65a619427ed00
> --
> Regards,
>
> Laurent Pinchart
>
More information about the libcamera-devel
mailing list