Browse Source

error: Poison g_autoptr(Error) to prevent its use

The previous commit reverted support for g_autoptr(Error).  This one
should stop it from coming back.

Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Tested-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Link: https://lore.kernel.org/r/20251201194510.1121221-4-peterx@redhat.com
Signed-off-by: Peter Xu <peterx@redhat.com>
pull/316/head
Markus Armbruster 8 months ago
committed by Peter Xu
parent
commit
b4898faabe
  1. 20
      include/qapi/error.h

20
include/qapi/error.h

@ -437,6 +437,26 @@ Error *error_copy(const Error *err);
*/
void error_free(Error *err);
/*
* Poison g_autoptr(Error) to prevent its use.
*
* Functions that report or propagate an error take ownership of the
* Error object. Explicit error_free() is needed when you handle an
* error in some other way. This is rare.
*
* g_autoptr(Error) would call error_free() automatically on return.
* To avoid a double-free, we'd have to manually clear the pointer
* every time we propagate or report.
*
* Thus, g_autoptr(Error) would make the rare case easier to get right
* (less prone to leaks), and the common case easier to get wrong
* (more prone to double-free).
*/
extern void
__attribute__((error("Do not use g_autoptr() to declare Error * variables")))
error_free_poisoned(Error *err);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(Error, error_free_poisoned)
/*
* Convenience function to assert that *@errp is set, then silently free it.
*/

Loading…
Cancel
Save