]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: v4l2-ctrls: Return the handler's error in v4l2_ctrl_handler_free()
authorSakari Ailus <sakari.ailus@linux.intel.com>
Thu, 19 Jun 2025 09:21:51 +0000 (12:21 +0300)
committerHans Verkuil <hverkuil@xs4all.nl>
Mon, 30 Jun 2025 06:47:41 +0000 (08:47 +0200)
v4l2_ctrl_handler_free() used to return void but changing this to int,
returning the handler's error code, enables the drivers to simply return
the handler's error in this common error handling pattern:

if (handler->error)
return v4l2_ctrl_handler_free(handler);

Suggested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/v4l2-core/v4l2-ctrls-core.c
include/media/v4l2-ctrls.h

index d28596c720d8a491e56cd96b4c92fcea8387d2a5..98b960775e87d004cc18f367b1f615aaf59a365c 100644 (file)
@@ -1631,14 +1631,17 @@ int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
 EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
 
 /* Free all controls and control refs */
-void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
+int v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
 {
        struct v4l2_ctrl_ref *ref, *next_ref;
        struct v4l2_ctrl *ctrl, *next_ctrl;
        struct v4l2_subscribed_event *sev, *next_sev;
 
-       if (hdl == NULL || hdl->buckets == NULL)
-               return;
+       if (!hdl)
+               return 0;
+
+       if (!hdl->buckets)
+               return hdl->error;
 
        v4l2_ctrl_handler_free_request(hdl);
 
@@ -1663,6 +1666,8 @@ void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
        hdl->cached = NULL;
        mutex_unlock(hdl->lock);
        mutex_destroy(&hdl->_lock);
+
+       return hdl->error;
 }
 EXPORT_SYMBOL(v4l2_ctrl_handler_free);
 
index 3a87096e064f501442f1e45396bfa444cfca059e..c32c46286441c07fd4b6d96536d65b5aa6c0ef6e 100644 (file)
@@ -579,8 +579,10 @@ int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
  * @hdl:       The control handler.
  *
  * Does nothing if @hdl == NULL.
+ *
+ * Return: @hdl's error field or 0 if @hdl is NULL.
  */
-void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl);
+int v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl);
 
 /**
  * v4l2_ctrl_lock() - Helper function to lock the handler