mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
fix Dispose method by vishnu
Original commit message from CVS: fix Dispose method by vishnu
This commit is contained in:
parent
1f144436cb
commit
31f2a95bf4
2 changed files with 80 additions and 4 deletions
|
@ -198,15 +198,53 @@ gst_file_index_init (GstFileIndex *index)
|
||||||
index->id_index = g_hash_table_new (g_int_hash, g_int_equal);
|
index->id_index = g_hash_table_new (g_int_hash, g_int_equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_file_index_id_free (GstFileIndexId *index_id, gboolean is_mmapped)
|
||||||
|
{
|
||||||
|
if (index_id->id_desc)
|
||||||
|
g_free (index_id->id_desc);
|
||||||
|
if (index_id->format)
|
||||||
|
g_free (index_id->format);
|
||||||
|
if (index_id->array) {
|
||||||
|
if (is_mmapped)
|
||||||
|
munmap (index_id->array->data, ARRAY_TOTAL_SIZE (index_id));
|
||||||
|
g_array_free (index_id->array, !is_mmapped);
|
||||||
|
}
|
||||||
|
g_free (index_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_id_index_free_helper (gpointer _key, GstFileIndexId *index_id,
|
||||||
|
GstFileIndex *index)
|
||||||
|
{
|
||||||
|
_file_index_id_free (index_id, index->is_loaded);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_file_index_dispose (GObject *object)
|
gst_file_index_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
GstFileIndex *index = GST_FILE_INDEX (object);
|
GstFileIndex *index = GST_FILE_INDEX (object);
|
||||||
|
|
||||||
if (index->location)
|
if (index->location) {
|
||||||
g_free (index->location);
|
g_free (index->location);
|
||||||
|
index->location = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// need to take care when destroying garrays with mmap'd segments
|
{
|
||||||
|
GSList *elem;
|
||||||
|
for (elem = index->unresolved; elem; elem = g_slist_next (elem))
|
||||||
|
_file_index_id_free (elem->data, index->is_loaded);
|
||||||
|
g_slist_free (index->unresolved);
|
||||||
|
index->unresolved = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_hash_table_foreach_steal (index->id_index,
|
||||||
|
(GHRFunc) _id_index_free_helper, index);
|
||||||
|
g_hash_table_destroy (index->id_index);
|
||||||
|
index->id_index = NULL;
|
||||||
|
|
||||||
|
gst_index_entry_free (index->ret_entry); // hack
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,15 +198,53 @@ gst_file_index_init (GstFileIndex *index)
|
||||||
index->id_index = g_hash_table_new (g_int_hash, g_int_equal);
|
index->id_index = g_hash_table_new (g_int_hash, g_int_equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_file_index_id_free (GstFileIndexId *index_id, gboolean is_mmapped)
|
||||||
|
{
|
||||||
|
if (index_id->id_desc)
|
||||||
|
g_free (index_id->id_desc);
|
||||||
|
if (index_id->format)
|
||||||
|
g_free (index_id->format);
|
||||||
|
if (index_id->array) {
|
||||||
|
if (is_mmapped)
|
||||||
|
munmap (index_id->array->data, ARRAY_TOTAL_SIZE (index_id));
|
||||||
|
g_array_free (index_id->array, !is_mmapped);
|
||||||
|
}
|
||||||
|
g_free (index_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_id_index_free_helper (gpointer _key, GstFileIndexId *index_id,
|
||||||
|
GstFileIndex *index)
|
||||||
|
{
|
||||||
|
_file_index_id_free (index_id, index->is_loaded);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_file_index_dispose (GObject *object)
|
gst_file_index_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
GstFileIndex *index = GST_FILE_INDEX (object);
|
GstFileIndex *index = GST_FILE_INDEX (object);
|
||||||
|
|
||||||
if (index->location)
|
if (index->location) {
|
||||||
g_free (index->location);
|
g_free (index->location);
|
||||||
|
index->location = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// need to take care when destroying garrays with mmap'd segments
|
{
|
||||||
|
GSList *elem;
|
||||||
|
for (elem = index->unresolved; elem; elem = g_slist_next (elem))
|
||||||
|
_file_index_id_free (elem->data, index->is_loaded);
|
||||||
|
g_slist_free (index->unresolved);
|
||||||
|
index->unresolved = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_hash_table_foreach_steal (index->id_index,
|
||||||
|
(GHRFunc) _id_index_free_helper, index);
|
||||||
|
g_hash_table_destroy (index->id_index);
|
||||||
|
index->id_index = NULL;
|
||||||
|
|
||||||
|
gst_index_entry_free (index->ret_entry); // hack
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue