In client_unlink_session: now don't iterate in session->medias
list where items are removed by gst_rtsp_session_release_media.
Instead, repeatedly remove the first item.
static void
client_unlink_session (GstRTSPClient * client, GstRTSPSession * session)
{
static void
client_unlink_session (GstRTSPClient * client, GstRTSPSession * session)
{
/* unlink all media managed in this session */
/* unlink all media managed in this session */
- for (medias = session->medias; medias; medias = g_list_next (medias)) {
- GstRTSPSessionMedia *media = medias->data;
+ while (g_list_length (session->medias) > 0) {
+ GstRTSPSessionMedia *media = g_list_first (session->medias)->data;
gst_rtsp_session_media_set_state (media, GST_STATE_NULL);
unlink_session_streams (client, session, media);
gst_rtsp_session_media_set_state (media, GST_STATE_NULL);
unlink_session_streams (client, session, media);
- /* unmanage the media in the session. */
+ /* unmanage the media in the session. this will modify session->medias */
gst_rtsp_session_release_media (session, media);
}
}
gst_rtsp_session_release_media (session, media);
}
}