diff options
author | Eion Robb <eion@robbmob.com> | 2017-04-17 11:08:38 +0300 |
---|---|---|
committer | Eion Robb <eion@robbmob.com> | 2017-04-17 11:08:38 +0300 |
commit | 6a05f4931576bf155a05453130c2ed6d86679bdc (patch) | |
tree | 5a7e834a3745e317ad5d758610f3e79481c8f5ca | |
parent | e95356fe75ba1b67b266690a12caf105585e412b (diff) |
Fix a crash-on-close
-rw-r--r-- | skypeweb/libskypeweb.c | 5 | ||||
-rw-r--r-- | skypeweb/purplecompat.h | 3 | ||||
-rw-r--r-- | skypeweb/skypeweb_messages.c | 5 |
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
|