summaryrefslogtreecommitdiff
path: root/telepathy-farstream
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2012-03-14 17:29:04 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2012-03-14 18:49:54 -0400
commitd20ace30f0bcb62f854cf383d185edba1faa85b6 (patch)
tree90a8465fdbc6748847a6b38dce532f307182fe50 /telepathy-farstream
parent9d9a0143b2792ee7f3fc25f4072cc72c8b0cbcf2 (diff)
CallStream: Protect against early dispose
Diffstat (limited to 'telepathy-farstream')
-rw-r--r--telepathy-farstream/call-stream.c40
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;