rem: g_set_error (error, 0, 0, data->msg); g_free (data->msg); g_free (data);
add: if (data->signal != BUFFERING_ASYNC) { if (save_data != NULL) { g_free (save_data->msg); g_free (save_data); } save_data = data; } else { g_free (data->msg); g_free (data); } }  if (save_data != NULL) { g_set_error (error, 0, 0, save_data->msg); g_free (save_data->msg); g_free (save_data);
context: xine_error (BaconVideoWidget *bvw, GError **error){	signal_data *data;	int err;	/* Steal messages from the async queue, if there's an error,	 * to use as the error message rather than the crappy errors from	 * xine_open() */	data = g_async_queue_try_pop (bvw->priv->queue);	if (data != NULL) {		g_assert (data->signal == MESSAGE_ASYNC);		g_set_error (error, 0, 0, data->msg);		g_free (data->msg);		g_free (data);		return;	}	err = xine_get_error (bvw->priv->stream);	if (err == XINE_ERROR_NONE)		return;	switch (err)	{	case XINE_ERROR_NO_INPUT_PLUGIN:	case XINE_ERROR_NO_DEMUX_PLUGIN:		g_set_error (error, 0, 0, _("There is no plugin to handle this"					" movie."));		break;	case XINE_ERROR_DEMUX_FAILED:		g_set_error (error, 0, 0, _("This movie is broken and can not "					"be played further."));		break;	case XINE_ERROR_MALFORMED_MRL:		g_set_error (error, 0, 0, _("This location is not "					"a valid one."));		break;	case XINE_ERROR_INPUT_FAILED:		g_set_error (error, 0, 0, _("This movie could not be opened."));		break;	default:		g_set_error (error, 0, 0, _("Generic Error."));		break;	}}