summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--ext/shout2/gstshout2.c12
2 files changed, 18 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 8dfb92cf..bb5acb8f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-04-17 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/shout2/gstshout2.c: (gst_shout2send_render):
+ Don't crash in case the connection to the server fails:
+ don't set pointer to NULL by assigning FALSE; error out
+ properly by using GST_ELEMENT_ERROR and returning
+ GST_FLOW_ERROR (fixes #338636). Lastly, free connection
+ before resetting the pointer.
+
2006-04-17 Jan Schmidt <thaytan@mad.scientist.com>
* gst/id3demux/id3tags.c:
diff --git a/ext/shout2/gstshout2.c b/ext/shout2/gstshout2.c
index 522f8a3f..2fc3bdd4 100644
--- a/ext/shout2/gstshout2.c
+++ b/ext/shout2/gstshout2.c
@@ -384,10 +384,16 @@ gst_shout2send_render (GstBaseSink * sink, GstBuffer * buf)
shout2send->started = TRUE;
} else {
- GST_ERROR ("Couldn't connect to server: %s",
+ GST_ERROR_OBJECT (shout2send, "Couldn't connect to server: %s",
shout_get_error (shout2send->conn));
- shout2send->conn = FALSE;
-
+ GST_ELEMENT_ERROR (shout2send, RESOURCE, OPEN_WRITE,
+ (NULL), GST_ERROR_SYSTEM);
+ g_signal_emit (G_OBJECT (shout2send),
+ gst_shout2send_signals[SIGNAL_CONNECTION_PROBLEM], 0,
+ shout_get_errno (shout2send->conn));
+ shout_free (shout2send->conn);
+ shout2send->conn = NULL;
+ return GST_FLOW_ERROR;
}
}