mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
pad: Don't leak user_data in gst_pad_start_task
When the task already exists, we forgot to free the passed `user_data`. This wasn't an issue for most C code, which doesn't pass a `GDestroyNotify`, but bindings such as gstreamer-rs do! That said, allocating a trampoline in gstreamer-rs just for it to get thrown away again is awkward. Maybe we need a `gst_pad_resume_task`? Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3920>
This commit is contained in:
parent
5119ca25e4
commit
aeb262a7e1
1 changed files with 5 additions and 0 deletions
|
@ -6324,6 +6324,7 @@ gst_pad_start_task (GstPad * pad, GstTaskFunction func, gpointer user_data,
|
|||
task = GST_PAD_TASK (pad);
|
||||
if (task == NULL) {
|
||||
task = gst_task_new (func, user_data, notify);
|
||||
notify = NULL;
|
||||
gst_task_set_lock (task, GST_PAD_GET_STREAM_LOCK (pad));
|
||||
gst_task_set_enter_callback (task, pad_enter_thread, pad, NULL);
|
||||
gst_task_set_leave_callback (task, pad_leave_thread, pad, NULL);
|
||||
|
@ -6345,6 +6346,10 @@ gst_pad_start_task (GstPad * pad, GstTaskFunction func, gpointer user_data,
|
|||
res = gst_task_set_state (task, GST_TASK_STARTED);
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
/* free user_data if it wasn't used for gst_task_new */
|
||||
if (notify)
|
||||
notify (user_data);
|
||||
|
||||
return res;
|
||||
|
||||
/* ERRORS */
|
||||
|
|
Loading…
Reference in a new issue