mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-04 22:48:54 +00:00
gst/udp/gstudpsrc.c: Since we depend on 0.10.13 -core, override the unlock_stop vmethod for safer shutdown.
Original commit message from CVS: * gst/udp/gstudpsrc.c: (gst_udpsrc_class_init), (gst_udpsrc_create), (gst_udpsrc_unlock), (gst_udpsrc_unlock_stop): Since we depend on 0.10.13 -core, override the unlock_stop vmethod for safer shutdown.
This commit is contained in:
parent
321a79d484
commit
127d233104
2 changed files with 39 additions and 31 deletions
|
@ -1,3 +1,10 @@
|
|||
2007-05-21 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst/udp/gstudpsrc.c: (gst_udpsrc_class_init),
|
||||
(gst_udpsrc_create), (gst_udpsrc_unlock), (gst_udpsrc_unlock_stop):
|
||||
Since we depend on 0.10.13 -core, override the unlock_stop vmethod for
|
||||
safer shutdown.
|
||||
|
||||
2007-05-21 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst/rtsp/gstrtpdec.c: (gst_rtp_dec_class_init):
|
||||
|
|
|
@ -201,6 +201,7 @@ static GstFlowReturn gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf);
|
|||
static gboolean gst_udpsrc_start (GstBaseSrc * bsrc);
|
||||
static gboolean gst_udpsrc_stop (GstBaseSrc * bsrc);
|
||||
static gboolean gst_udpsrc_unlock (GstBaseSrc * bsrc);
|
||||
static gboolean gst_udpsrc_unlock_stop (GstBaseSrc * bsrc);
|
||||
static void gst_udpsrc_finalize (GObject * object);
|
||||
|
||||
static void gst_udpsrc_set_property (GObject * object, guint prop_id,
|
||||
|
@ -290,6 +291,7 @@ gst_udpsrc_class_init (GstUDPSrcClass * klass)
|
|||
gstbasesrc_class->start = gst_udpsrc_start;
|
||||
gstbasesrc_class->stop = gst_udpsrc_stop;
|
||||
gstbasesrc_class->unlock = gst_udpsrc_unlock;
|
||||
gstbasesrc_class->unlock_stop = gst_udpsrc_unlock_stop;
|
||||
gstbasesrc_class->get_caps = gst_udpsrc_getcaps;
|
||||
|
||||
gstpushsrc_class->create = gst_udpsrc_create;
|
||||
|
@ -419,36 +421,9 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
|
|||
"timeout", G_TYPE_UINT64, udpsrc->timeout, NULL)));
|
||||
try_again = TRUE;
|
||||
} else {
|
||||
if (FD_ISSET (READ_SOCKET (udpsrc), &read_fds)) {
|
||||
/* got control message */
|
||||
while (TRUE) {
|
||||
gchar command;
|
||||
int res;
|
||||
|
||||
READ_COMMAND (udpsrc, command, res);
|
||||
if (res <= 0) {
|
||||
GST_LOG_OBJECT (udpsrc, "no more commands");
|
||||
/* no more commands */
|
||||
break;
|
||||
}
|
||||
|
||||
switch (command) {
|
||||
case CONTROL_STOP:
|
||||
/* break out of the select loop */
|
||||
GST_LOG_OBJECT (udpsrc, "stop");
|
||||
/* stop this function */
|
||||
stop = TRUE;
|
||||
break;
|
||||
default:
|
||||
GST_WARNING_OBJECT (udpsrc, "unkown");
|
||||
g_warning ("multiudpsink: unknown control message received");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (FD_ISSET (READ_SOCKET (udpsrc), &read_fds))
|
||||
goto stopped;
|
||||
}
|
||||
if (stop)
|
||||
goto stopped;
|
||||
} while (try_again);
|
||||
|
||||
/* ask how much is available for reading on the socket, this should be exactly
|
||||
|
@ -883,9 +858,35 @@ gst_udpsrc_unlock (GstBaseSrc * bsrc)
|
|||
|
||||
src = GST_UDPSRC (bsrc);
|
||||
|
||||
GST_DEBUG ("sending stop command");
|
||||
GST_LOG_OBJECT (src, "sending stop command");
|
||||
SEND_COMMAND (src, CONTROL_STOP, res);
|
||||
GST_DEBUG ("sent stop command %d", res);
|
||||
GST_LOG_OBJECT (src, "sent stop command %d", res);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_udpsrc_unlock_stop (GstBaseSrc * bsrc)
|
||||
{
|
||||
GstUDPSrc *src;
|
||||
|
||||
src = GST_UDPSRC (bsrc);
|
||||
|
||||
GST_LOG_OBJECT (src, "clearing unlock command queue");
|
||||
|
||||
while (TRUE) {
|
||||
gchar command;
|
||||
int res;
|
||||
|
||||
GST_LOG_OBJECT (src, "reading command");
|
||||
|
||||
READ_COMMAND (src, command, res);
|
||||
if (res <= 0) {
|
||||
GST_LOG_OBJECT (src, "no more commands");
|
||||
/* no more commands */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue