mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 04:52:28 +00:00
gst/tcp/gstmultifdsink.c: Fix crasher when going to NULL multiple times.
Original commit message from CVS: * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init), (gst_multifdsink_finalize), (multifdsink_hash_remove), (gst_multifdsink_stop): Fix crasher when going to NULL multiple times.
This commit is contained in:
parent
25a70411d2
commit
bd17e7c611
2 changed files with 30 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
2005-10-08 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
|
||||
(gst_multifdsink_finalize), (multifdsink_hash_remove),
|
||||
(gst_multifdsink_stop):
|
||||
Fix crasher when going to NULL multiple times.
|
||||
|
||||
2005-10-06 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_event),
|
||||
|
|
|
@ -221,6 +221,7 @@ gst_client_status_get_type (void)
|
|||
static void gst_multifdsink_base_init (gpointer g_class);
|
||||
static void gst_multifdsink_class_init (GstMultiFdSinkClass * klass);
|
||||
static void gst_multifdsink_init (GstMultiFdSink * multifdsink);
|
||||
static void gst_multifdsink_finalize (GObject * object);
|
||||
|
||||
static void gst_multifdsink_remove_client_link (GstMultiFdSink * sink,
|
||||
GList * link);
|
||||
|
@ -293,6 +294,7 @@ gst_multifdsink_class_init (GstMultiFdSinkClass * klass)
|
|||
|
||||
gobject_class->set_property = gst_multifdsink_set_property;
|
||||
gobject_class->get_property = gst_multifdsink_get_property;
|
||||
gobject_class->finalize = gst_multifdsink_finalize;
|
||||
|
||||
g_object_class_install_property (gobject_class, ARG_PROTOCOL,
|
||||
g_param_spec_enum ("protocol", "Protocol", "The protocol to wrap data in",
|
||||
|
@ -463,6 +465,20 @@ gst_multifdsink_init (GstMultiFdSink * this)
|
|||
this->sync_method = DEFAULT_SYNC_METHOD;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_multifdsink_finalize (GObject * object)
|
||||
{
|
||||
GstMultiFdSink *this;
|
||||
|
||||
this = GST_MULTIFDSINK (object);
|
||||
|
||||
CLIENTS_LOCK_FREE (this);
|
||||
g_hash_table_destroy (this->fd_hash);
|
||||
g_array_free (this->bufqueue, TRUE);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
void
|
||||
gst_multifdsink_add (GstMultiFdSink * sink, int fd)
|
||||
{
|
||||
|
@ -1721,6 +1737,12 @@ socket_pair:
|
|||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
multifdsink_hash_remove (gpointer key, gpointer value, gpointer data)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_multifdsink_stop (GstBaseSink * bsink)
|
||||
{
|
||||
|
@ -1761,9 +1783,8 @@ gst_multifdsink_stop (GstBaseSink * bsink)
|
|||
gst_fdset_free (this->fdset);
|
||||
this->fdset = NULL;
|
||||
}
|
||||
g_hash_table_foreach_remove (this->fd_hash, multifdsink_hash_remove, this);
|
||||
GST_FLAG_UNSET (this, GST_MULTIFDSINK_OPEN);
|
||||
CLIENTS_LOCK_FREE (this);
|
||||
g_hash_table_destroy (this->fd_hash);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue