diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2012-03-14 17:29:04 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2012-03-14 18:49:54 -0400 |
commit | d20ace30f0bcb62f854cf383d185edba1faa85b6 (patch) | |
tree | 90a8465fdbc6748847a6b38dce532f307182fe50 /telepathy-farstream | |
parent | 9d9a0143b2792ee7f3fc25f4072cc72c8b0cbcf2 (diff) |
CallStream: Protect against early dispose
Diffstat (limited to 'telepathy-farstream')
-rw-r--r-- | telepathy-farstream/call-stream.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/telepathy-farstream/call-stream.c b/telepathy-farstream/call-stream.c index 3a71a22..d0a9028 100644 --- a/telepathy-farstream/call-stream.c +++ b/telepathy-farstream/call-stream.c @@ -544,6 +544,9 @@ server_info_retrieved (TpCallStream *proxy, { TfCallStream *self = TF_CALL_STREAM (weak_object); + if (self->proxy == NULL) + return; + self->server_info_retrieved = TRUE; tf_call_stream_try_adding_fsstream (self); @@ -556,6 +559,9 @@ relay_info_changed (TpCallStream *proxy, { TfCallStream *self = TF_CALL_STREAM (weak_object); + if (self->proxy == NULL) + return; + if (self->server_info_retrieved) { tf_call_stream_fail_literal (self, @@ -581,6 +587,9 @@ stun_servers_changed (TpCallStream *proxy, { TfCallStream *self = TF_CALL_STREAM (weak_object); + if (self->proxy == NULL) + return; + if (self->server_info_retrieved) { tf_call_stream_fail_literal (self, @@ -741,6 +750,9 @@ remote_candidates_added (TpProxy *proxy, { TfCallStream *self = TF_CALL_STREAM (weak_object); + if (self->proxy == NULL) + return; + if (!self->has_endpoint_properties) return; @@ -758,6 +770,9 @@ remote_credentials_set (TpProxy *proxy, { TfCallStream *self = TF_CALL_STREAM (weak_object); + if (self->proxy == NULL) + return; + if (self->endpoint != proxy) return; @@ -950,6 +965,9 @@ endpoints_changed (TpCallStream *proxy, { TfCallStream *self = TF_CALL_STREAM (weak_object); + if (self->proxy == NULL) + return; + /* Ignore signals before getting the properties to avoid races */ if (!self->has_media_properties) return; @@ -1017,6 +1035,9 @@ got_stream_media_properties (TpProxy *proxy, GHashTable *out_Properties, GPtrArray *endpoints; gboolean valid; + if (self->proxy == NULL) + return; + if (error) { tf_call_stream_fail (self, @@ -1036,6 +1057,9 @@ got_stream_media_properties (TpProxy *proxy, GHashTable *out_Properties, return; } + if (self->proxy == NULL) + return; + self->transport_type = tp_asv_get_uint32 (out_Properties, "Transport", &valid); if (!valid) @@ -1176,6 +1200,9 @@ stream_prepared (GObject *src_object, GAsyncResult *res, gpointer user_data) GHashTableIter iter; gpointer key, value; + if (self->proxy == NULL) + return; + if (!tp_proxy_prepare_finish (src_object, res, &error)) { tf_call_stream_fail (self, @@ -1425,7 +1452,7 @@ fscandidate_to_tpcandidate (TfCallStream *stream, FsCandidate *candidate) static void cb_fs_new_local_candidate (TfCallStream *stream, FsCandidate *candidate) { - GPtrArray *candidate_list = g_ptr_array_sized_new (1); + GPtrArray *candidate_list; if (!stream->multiple_usernames) { @@ -1461,6 +1488,7 @@ cb_fs_new_local_candidate (TfCallStream *stream, FsCandidate *candidate) candidate->ttl,candidate-> base_ip, candidate->base_port); + candidate_list = g_ptr_array_sized_new (1); g_ptr_array_add (candidate_list, fscandidate_to_tpcandidate (stream, candidate)); @@ -1608,6 +1636,10 @@ tf_call_stream_fail_literal (TfCallStream *self, const gchar *message) { g_warning ("%s", message); + + if (self->proxy == NULL) + return; + tp_cli_call_stream_interface_media_call_fail ( self->proxy, -1, tp_value_array_build (4, @@ -1643,6 +1675,9 @@ tf_call_stream_sending_failed (TfCallStream *self, const gchar *message) { g_warning ("Reporting sending failure: %s", message); + if (self->proxy == NULL) + return; + tp_cli_call_stream_interface_media_call_report_sending_failure ( self->proxy, -1, TP_CALL_STATE_CHANGE_REASON_INTERNAL_ERROR, TP_ERROR_STR_MEDIA_STREAMING_ERROR, @@ -1655,6 +1690,9 @@ tf_call_stream_receiving_failed (TfCallStream *self, guint *handles, guint handle_count, const gchar *message) { + if (self->proxy == NULL) + return; + if (handle_count && handle_count > 0) { guint i; |