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>2017-04-17 11:08:38 +0300
committerEion Robb <eion@robbmob.com>2017-04-17 11:08:38 +0300
commit6a05f4931576bf155a05453130c2ed6d86679bdc (patch)
tree5a7e834a3745e317ad5d758610f3e79481c8f5ca
parente95356fe75ba1b67b266690a12caf105585e412b (diff)
Fix a crash-on-close
-rw-r--r--skypeweb/libskypeweb.c5
-rw-r--r--skypeweb/purplecompat.h3
-rw-r--r--skypeweb/skypeweb_messages.c5
3 files changed, 9 insertions, 4 deletions
diff --git a/skypeweb/libskypeweb.c b/skypeweb/libskypeweb.c
index da41872..665e058 100644
--- a/skypeweb/libskypeweb.c
+++ b/skypeweb/libskypeweb.c
@@ -367,6 +367,9 @@ skypeweb_close(PurpleConnection *pc)
GSList *buddies;
g_return_if_fail(pc != NULL);
+#if !PURPLE_VERSION_CHECK(3, 0, 0)
+ purple_connection_set_state(pc, PURPLE_CONNECTION_DISCONNECTING);
+#endif
sa = purple_connection_get_protocol_data(pc);
g_return_if_fail(sa != NULL);
@@ -379,8 +382,8 @@ skypeweb_close(PurpleConnection *pc)
purple_debug_info("skypeweb", "destroying incomplete connections\n");
- purple_http_conn_cancel_all(pc);
purple_http_connection_set_destroy(sa->conns);
+ purple_http_conn_cancel_all(pc);
purple_http_keepalive_pool_unref(sa->keepalive_pool);
purple_http_cookie_jar_unref(sa->cookie_jar);
diff --git a/skypeweb/purplecompat.h b/skypeweb/purplecompat.h
index 16a5309..04039ba 100644
--- a/skypeweb/purplecompat.h
+++ b/skypeweb/purplecompat.h
@@ -62,6 +62,7 @@ purple_blist_node_set_transient(PurpleBlistNode *node, gboolean transient)
#define PURPLE_IS_CONNECTION PURPLE_CONNECTION_IS_VALID
#define PURPLE_CONNECTION_DISCONNECTED PURPLE_DISCONNECTED
+#define PURPLE_CONNECTION_DISCONNECTING 4
#define PURPLE_CONNECTION_CONNECTING PURPLE_CONNECTING
#define PURPLE_CONNECTION_CONNECTED PURPLE_CONNECTED
#define PURPLE_CONNECTION_FLAG_HTML PURPLE_CONNECTION_HTML
@@ -72,7 +73,7 @@ purple_blist_node_set_transient(PurpleBlistNode *node, gboolean transient)
#define purple_request_cpar_from_connection(a) purple_connection_get_account(a), NULL, NULL
#define purple_connection_get_protocol purple_connection_get_prpl
#define purple_connection_error purple_connection_error_reason
-#define purple_connection_is_disconnecting(c) FALSE
+#define purple_connection_is_disconnecting(c) (purple_connection_get_state(c) == PURPLE_DISCONNECTED || purple_connection_get_state(c) == PURPLE_CONNECTION_DISCONNECTING)
#define purple_connection_set_flags(pc, f) ((pc)->flags = (f))
#define purple_connection_get_flags(pc) ((pc)->flags)
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c
index b4bc4d8..4d47948 100644
--- a/skypeweb/skypeweb_messages.c
+++ b/skypeweb/skypeweb_messages.c
@@ -748,8 +748,9 @@ skypeweb_poll_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
//TODO record id of highest recieved id to make sure we dont process the same id twice
}
- sa->poll_timeout = purple_timeout_add_seconds(1, skypeweb_timeout, sa);
-
+ if (!purple_connection_is_disconnecting(sa->pc)) {
+ sa->poll_timeout = purple_timeout_add_seconds(1, skypeweb_timeout, sa);
+ }
}
void