mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 15:51:11 +00:00
rtspsrc: Fix for segmentation fault when handling set/get_parameter requests
gstrtspsrc uses a queue, set_get_param_q, to store set param and get param requests. The requests are put on the queue by calling get_parameters() and set_parameter(). A thread which executs in gst_rtspsrc_thread() then pops requests from the queue and processes them. The crash occured because the queue became empty and a NULL request object was then used. The reason that the queue became empty is that it was popped even when the thread was NOT processing a get parameter or set parameter command. The fix is to make sure that the queue is ONLY popped when the command being processed is a set parameter or get parameter command.
This commit is contained in:
parent
c00796eaa5
commit
54c4ba82f8
1 changed files with 7 additions and 1 deletions
|
@ -8976,7 +8976,9 @@ gst_rtspsrc_thread (GstRTSPSrc * src)
|
||||||
src->pending_cmd = CMD_LOOP;
|
src->pending_cmd = CMD_LOOP;
|
||||||
} else {
|
} else {
|
||||||
ParameterRequest *next_req;
|
ParameterRequest *next_req;
|
||||||
req = g_queue_pop_head (&src->set_get_param_q);
|
if (cmd == CMD_GET_PARAMETER || cmd == CMD_SET_PARAMETER) {
|
||||||
|
req = g_queue_pop_head (&src->set_get_param_q);
|
||||||
|
}
|
||||||
next_req = g_queue_peek_head (&src->set_get_param_q);
|
next_req = g_queue_peek_head (&src->set_get_param_q);
|
||||||
src->pending_cmd = next_req ? next_req->cmd : CMD_LOOP;
|
src->pending_cmd = next_req ? next_req->cmd : CMD_LOOP;
|
||||||
}
|
}
|
||||||
|
@ -9369,6 +9371,8 @@ gst_rtspsrc_get_parameter (GstRTSPSrc * src, ParameterRequest * req)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "creating server get_parameter");
|
GST_DEBUG_OBJECT (src, "creating server get_parameter");
|
||||||
|
|
||||||
|
g_assert (req);
|
||||||
|
|
||||||
if ((res = gst_rtspsrc_ensure_open (src, FALSE)) < 0)
|
if ((res = gst_rtspsrc_ensure_open (src, FALSE)) < 0)
|
||||||
goto open_failed;
|
goto open_failed;
|
||||||
|
|
||||||
|
@ -9486,6 +9490,8 @@ gst_rtspsrc_set_parameter (GstRTSPSrc * src, ParameterRequest * req)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "creating server set_parameter");
|
GST_DEBUG_OBJECT (src, "creating server set_parameter");
|
||||||
|
|
||||||
|
g_assert (req);
|
||||||
|
|
||||||
if ((res = gst_rtspsrc_ensure_open (src, FALSE)) < 0)
|
if ((res = gst_rtspsrc_ensure_open (src, FALSE)) < 0)
|
||||||
goto open_failed;
|
goto open_failed;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue