[Swfdec] 5 commits - libswfdec/swfdec_as_object.c libswfdec/swfdec_loader.c libswfdec/swfdec_style_sheet.c libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c test/swfdec_test_test.c
Benjamin Otte
company at kemper.freedesktop.org
Sat Jan 19 04:07:45 PST 2008
libswfdec/swfdec_as_object.c | 3 +++
libswfdec/swfdec_loader.c | 8 +-------
libswfdec/swfdec_style_sheet.c | 3 ++-
libswfdec/swfdec_text_field_movie.c | 12 ++++++------
libswfdec/swfdec_text_field_movie_as.c | 4 ++++
test/swfdec_test_test.c | 1 +
6 files changed, 17 insertions(+), 14 deletions(-)
New commits:
commit 2ddba438108342502c59bc4f09d96118a59b5e33
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 03:27:03 2008 +0100
we need to clear the stylesheet reference if the style sheet dies before us
sems signals aren't the proper way to do this marshalling either
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 040c336..bc8cdb6 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -1060,13 +1060,13 @@ swfdec_text_field_movie_dispose (GObject *object)
text->asterisks_length = 0;
}
- if (text->style_sheet) {
- if (SWFDEC_IS_STYLESHEET (text->style_sheet)) {
- g_signal_handlers_disconnect_matched (text->style_sheet,
- G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, text);
- }
- text->style_sheet = NULL;
+ if (SWFDEC_IS_STYLESHEET (text->style_sheet)) {
+ g_signal_handlers_disconnect_matched (text->style_sheet,
+ G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, text);
+ g_object_remove_weak_pointer (G_OBJECT (text->style_sheet),
+ (gpointer *) &text->style_sheet);
}
+ text->style_sheet = NULL;
for (iter = text->formats; iter != NULL; iter = iter->next) {
g_free (text->formats->data);
diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c
index 5d76ed4..1003011 100644
--- a/libswfdec/swfdec_text_field_movie_as.c
+++ b/libswfdec/swfdec_text_field_movie_as.c
@@ -932,6 +932,8 @@ swfdec_text_field_movie_set_styleSheet (SwfdecAsContext *cx,
if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) {
g_signal_handlers_disconnect_by_func (text->style_sheet,
swfdec_text_field_movie_style_sheet_update, text);
+ g_object_remove_weak_pointer (G_OBJECT (text->style_sheet),
+ (gpointer *) &text->style_sheet);
}
text->style_sheet = value;
@@ -939,6 +941,8 @@ swfdec_text_field_movie_set_styleSheet (SwfdecAsContext *cx,
if (SWFDEC_IS_STYLESHEET (value)) {
g_signal_connect_swapped (value, "update",
G_CALLBACK (swfdec_text_field_movie_style_sheet_update), text);
+ g_object_add_weak_pointer (G_OBJECT (text->style_sheet),
+ (gpointer *) &text->style_sheet);
swfdec_text_field_movie_style_sheet_update (text);
}
commit de423981f1b112c1f9141c8cc7c9e79ababe8b7a
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 03:10:34 2008 +0100
memleak + invalid pointer references after GC
diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index a5af75d..854681d 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -130,6 +130,8 @@ swfdec_as_object_dispose (GObject *gobject)
SwfdecAsObject *object = SWFDEC_AS_OBJECT (gobject);
g_assert (object->properties == NULL);
+ g_slist_free (object->interfaces);
+ object->interfaces = NULL;
G_OBJECT_CLASS (swfdec_as_object_parent_class)->dispose (gobject);
}
@@ -167,6 +169,7 @@ swfdec_as_object_do_mark (SwfdecAsObject *object)
g_hash_table_foreach (object->properties, swfdec_as_object_mark_property, NULL);
if (object->watches)
g_hash_table_foreach (object->watches, swfdec_as_object_mark_watch, NULL);
+ g_slist_foreach (object->interfaces, (GFunc) swfdec_as_object_mark, NULL);
}
static void
commit 23be23222d6120f80642f74f2ef421e5bb2887d7
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 02:39:07 2008 +0100
memleak
diff --git a/libswfdec/swfdec_style_sheet.c b/libswfdec/swfdec_style_sheet.c
index f146c8a..847b199 100644
--- a/libswfdec/swfdec_style_sheet.c
+++ b/libswfdec/swfdec_style_sheet.c
@@ -202,7 +202,7 @@ swfdec_style_sheet_parse (SwfdecAsContext *cx, const char *css)
p = swfdec_style_sheet_parse_selectors (cx, p, object, selectors);
} else {
if (*p == '}') {
- selectors->len = 0;
+ g_ptr_array_set_size (selectors, 0);
p++;
p += strspn (p, " \t\r\n");
} else {
@@ -219,6 +219,7 @@ swfdec_style_sheet_parse (SwfdecAsContext *cx, const char *css)
}
}
+ g_ptr_array_free (selectors, TRUE);
if (p == NULL)
return NULL;
commit 49c482349ce3e2288ba4b5ba125a014125c5b325
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 02:27:56 2008 +0100
memleak
What was that supposed to do?!
diff --git a/libswfdec/swfdec_loader.c b/libswfdec/swfdec_loader.c
index f3e3642..e089eef 100644
--- a/libswfdec/swfdec_loader.c
+++ b/libswfdec/swfdec_loader.c
@@ -606,7 +606,7 @@ char *
swfdec_loader_get_text (SwfdecLoader *loader, guint version)
{
SwfdecBuffer *buffer;
- char *raw, *text;
+ char *text;
guint size, i, j;
/* get the text from the loader */
@@ -615,12 +615,6 @@ swfdec_loader_get_text (SwfdecLoader *loader, guint version)
SWFDEC_LOG ("empty loader, returning empty string");
return g_strdup ("");
}
- raw = g_try_malloc (size + 1);
- if (!raw) {
- SWFDEC_ERROR ("not enough memory to copy %u bytes", size);
- swfdec_buffer_queue_clear (loader->queue);
- return NULL;
- }
buffer = swfdec_buffer_queue_peek (loader->queue, size);
if (!buffer)
commit 02f8e37a36d647a227223cec8ff1cc997040c845
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 02:20:48 2008 +0100
memleak
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index f1a5d9f..46fa6a6 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -249,6 +249,7 @@ swfdec_test_do_reset (SwfdecTestTest *test, const char *filename)
if (filename == NULL)
return;
+ g_free (test->filename);
test->filename = g_strdup (filename);
test->player_quit = FALSE;
}
More information about the Swfdec
mailing list