Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/skype4pidgin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEion Robb <eion@robbmob.com>2015-11-08 04:01:54 +0300
committerEion Robb <eion@robbmob.com>2015-11-08 04:01:54 +0300
commitdd60f4f73d608d3095576988d8056c87f792a5fd (patch)
treefa433fac604cd4b8d7c705b82f551ed574d8726a
parent0a2100d1832e5d44917a68472fa0931230ffffa8 (diff)
parent6952dd772748f2dfe777194480ad5f22e2c5d3ad (diff)
Merge pull request #359 from dequis/small-leak-fixes
Some small leak fixes
-rw-r--r--skypeweb/libskypeweb.c11
-rw-r--r--skypeweb/libskypeweb.h1
-rw-r--r--skypeweb/skypeweb_contacts.c3
-rw-r--r--skypeweb/skypeweb_messages.c10
4 files changed, 20 insertions, 5 deletions
diff --git a/skypeweb/libskypeweb.c b/skypeweb/libskypeweb.c
index dd9d6cd..aaa4593 100644
--- a/skypeweb/libskypeweb.c
+++ b/skypeweb/libskypeweb.c
@@ -230,7 +230,7 @@ skypeweb_join_chat(PurpleConnection *pc, GHashTable *data)
purple_conversation_present(PURPLE_CONVERSATION(chatconv));
}
-static void
+void
skypeweb_buddy_free(PurpleBuddy *buddy)
{
SkypeWebBuddy *sbuddy = purple_buddy_get_protocol_data(buddy);
@@ -335,6 +335,7 @@ static void
skypeweb_close(PurpleConnection *pc)
{
SkypeWebAccount *sa;
+ GSList *buddies;
g_return_if_fail(pc != NULL);
@@ -372,6 +373,14 @@ skypeweb_close(PurpleConnection *pc)
purple_util_fetch_url_cancel(sa->url_datas->data);
sa->url_datas = g_slist_delete_link(sa->url_datas, sa->url_datas);
}
+
+ buddies = purple_find_buddies(sa->account, NULL);
+ while (buddies != NULL) {
+ PurpleBuddy *buddy = buddies->data;
+ skypeweb_buddy_free(buddy);
+ purple_buddy_set_protocol_data(buddy, NULL);
+ buddies = g_slist_delete_link(buddies, buddies);
+ }
g_hash_table_destroy(sa->sent_messages_hash);
g_hash_table_destroy(sa->cookie_table);
diff --git a/skypeweb/libskypeweb.h b/skypeweb/libskypeweb.h
index 22443c8..4ae8c98 100644
--- a/skypeweb/libskypeweb.h
+++ b/skypeweb/libskypeweb.h
@@ -292,6 +292,7 @@ struct _SkypeWebBuddy {
gchar *mood;
};
+void skypeweb_buddy_free(PurpleBuddy *buddy);
void skypeweb_do_all_the_things(SkypeWebAccount *sa);
diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c
index c92af89..1328340 100644
--- a/skypeweb/skypeweb_contacts.c
+++ b/skypeweb/skypeweb_contacts.c
@@ -676,6 +676,9 @@ skypeweb_get_friend_list_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_d
if (json_object_has_member(name, "surname"))
surname = json_object_get_string_member(name, "surname");
+
+ // try to free the sbuddy here. no-op if it's not set before, otherwise prevents a leak.
+ skypeweb_buddy_free(buddy);
SkypeWebBuddy *sbuddy = g_new0(SkypeWebBuddy, 1);
sbuddy->skypename = g_strdup(id);
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c
index 0610793..26a66a1 100644
--- a/skypeweb/skypeweb_messages.c
+++ b/skypeweb/skypeweb_messages.c
@@ -987,11 +987,11 @@ skypeweb_subscribe(SkypeWebAccount *sa)
static void
skypeweb_got_registration_token(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message)
{
- gchar *registration_token;
- gchar *endpointId;
- gchar *expires;
+ gchar *registration_token = NULL;
+ gchar *endpointId = NULL;
+ gchar *expires = NULL;
SkypeWebAccount *sa = user_data;
- gchar *new_messages_host;
+ gchar *new_messages_host = NULL;
sa->url_datas = g_slist_remove(sa->url_datas, url_data);
@@ -1023,6 +1023,7 @@ skypeweb_got_registration_token(PurpleUtilFetchUrlData *url_data, gpointer user_
skypeweb_get_registration_token(sa);
return;
}
+ g_free(new_messages_host);
registration_token = skypeweb_string_get_chunk(url_text, len, "Set-RegistrationToken: ", ";");
endpointId = skypeweb_string_get_chunk(url_text, len, "endpointId=", "\r\n");
@@ -1138,6 +1139,7 @@ skypeweb_set_statusid(SkypeWebAccount *sa, const gchar *status)
gchar *url = g_strdup_printf("/v1/users/ME/endpoints/%s/presenceDocs/messagingService", purple_url_encode(sa->endpoint));
post = "{\"id\":\"messagingService\", \"type\":\"EndpointPresenceDoc\", \"selfLink\":\"uri\", \"privateInfo\":{\"epname\":\"skype\"}, \"publicInfo\":{\"capabilities\":\"\", \"type\":1, \"typ\":1, \"skypeNameVersion\":\"" SKYPEWEB_CLIENTINFO_VERSION "/" SKYPEWEB_CLIENTINFO_NAME "\", \"nodeInfo\":\"xx\", \"version\":\"" SKYPEWEB_CLIENTINFO_VERSION "\"}}";
skypeweb_post_or_get(sa, SKYPEWEB_METHOD_PUT | SKYPEWEB_METHOD_SSL, sa->messages_host, url, post, NULL, NULL, TRUE);
+ g_free(url);
}
}