pidgin: d25c9ed7: Don't leak image refs in gtkstatusbox an...
darkrain42 at pidgin.im
darkrain42 at pidgin.im
Wed May 6 15:00:27 EDT 2009
-----------------------------------------------------------------
Revision: d25c9ed783b024f75fac25f2320ddf5df6907c36
Ancestor: 0cb6e54b872e187a678895961106518e55aab987
Author: darkrain42 at pidgin.im
Date: 2009-05-06T18:37:40
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/d25c9ed783b024f75fac25f2320ddf5df6907c36
Modified files:
libpurple/protocols/null/nullprpl.c pidgin/gtkstatusbox.c
ChangeLog:
Don't leak image refs in gtkstatusbox and assertion failure in nullprpl
purple_imgstore_new_from_file gives us a ref and
pidgin_status_box_set_buddy_icon also takes a ref.
-------------- next part --------------
============================================================
--- libpurple/protocols/null/nullprpl.c d5929dc12e9d6d88ba016ae959c817e93fc199a0
+++ libpurple/protocols/null/nullprpl.c ad111d441b11dfcfa5a18edec7933134d65391f3
@@ -909,7 +909,8 @@ static void nullprpl_set_buddy_icon(Purp
static void nullprpl_set_buddy_icon(PurpleConnection *gc,
PurpleStoredImage *img) {
purple_debug_info("nullprpl", "setting %s's buddy icon to %s\n",
- gc->account->username, purple_imgstore_get_filename(img));
+ gc->account->username,
+ img ? purple_imgstore_get_filename(img) : "(null)");
}
static void nullprpl_remove_group(PurpleConnection *gc, PurpleGroup *group) {
============================================================
--- pidgin/gtkstatusbox.c 279ea5caf9388ea4dc8d959fc3149c95afd55ccb
+++ pidgin/gtkstatusbox.c 7702e70e321f0a70698dae229696e17457629f8c
@@ -471,6 +471,12 @@ setup_icon_box(PidginStatusBox *status_b
img = purple_imgstore_new_from_file(filename);
pidgin_status_box_set_buddy_icon(status_box, img);
+ if (img)
+ /*
+ * purple_imgstore_new gives us a reference and
+ * pidgin_status_box_set_buddy_icon also takes one.
+ */
+ purple_imgstore_unref(img);
}
status_box->hand_cursor = gdk_cursor_new (GDK_HAND2);
@@ -1467,6 +1473,13 @@ buddy_icon_set_cb(const char *filename,
if (filename)
data = pidgin_convert_buddy_icon(plug, filename, &len);
img = purple_buddy_icons_set_account_icon(box->account, data, len);
+ if (img)
+ /*
+ * set_account_icon doesn't give us a reference, but we
+ * unref one below (for the other code path)
+ */
+ purple_imgstore_ref(img);
+
purple_account_set_buddy_icon_path(box->account, filename);
purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL));
@@ -1486,7 +1499,7 @@ buddy_icon_set_cb(const char *filename,
size_t len = 0;
if (filename)
data = pidgin_convert_buddy_icon(plug, filename, &len);
- img = purple_buddy_icons_set_account_icon(account, data, len);
+ purple_buddy_icons_set_account_icon(account, data, len);
purple_account_set_buddy_icon_path(account, filename);
}
}
@@ -1498,6 +1511,8 @@ buddy_icon_set_cb(const char *filename,
}
pidgin_status_box_set_buddy_icon(box, img);
+ if (img)
+ purple_imgstore_unref(img);
}
static void
More information about the Commits
mailing list