rem: g_free (bvw->priv->last_error_message); bvw->priv->last_error_message = g_strdup (error->message);
add: if (!bvw->priv->last_error) bvw->priv->last_error = g_error_copy (error);
context: got_error (GstElement *play, GstElement *orig, GError *error,           gchar *debug, BaconVideoWidget * bvw){  BVWSignal *signal;    g_return_if_fail (bvw != NULL);  g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));  /* since we're opening, we will never enter the mainloop   * until we return, so setting an idle handler doesn't   * help... Anyway, let's prepare a message. */  if (GST_STATE (play) != GST_STATE_PLAYING) {    g_free (bvw->priv->last_error_message);    bvw->priv->last_error_message = g_strdup (error->message);    return;  }    signal = g_new0 (BVWSignal, 1);  signal->signal_id = ASYNC_ERROR;  signal->signal_data.error.element = orig;  signal->signal_data.error.error = g_error_copy (error);  if (debug)    signal->signal_data.error.debug_message = g_strdup (debug);  g_async_queue_push (bvw->priv->queue, signal);  g_idle_add ((GSourceFunc) bacon_video_widget_signal_idler, bvw);}