dtls: Avoid bio_buffer assertion on shutdown.
authorJan Schmidt <jan@centricular.com>
Fri, 30 Oct 2020 11:49:22 +0000 (22:49 +1100)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Sat, 31 Oct 2020 01:47:06 +0000 (01:47 +0000)
On shutdown, a previous iteration of dtsl_connection_process()
might be incomplete and leave a partial bio_buffer behind.

If the DTLS connection is already marked closed, drop out
of dtls_connection_process early without asserting.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1741>

ext/dtls/gstdtlsconnection.c

index 22e0132..1c8364a 100644 (file)
@@ -619,9 +619,8 @@ gst_dtls_connection_process (GstDtlsConnection * self, gpointer data, gsize len,
   g_mutex_lock (&priv->mutex);
   GST_TRACE_OBJECT (self, "locked @ process");
 
-  g_warn_if_fail (!priv->bio_buffer);
-
-  if (self->priv->received_close_notify) {
+  if (self->priv->received_close_notify
+      || self->priv->connection_state == GST_DTLS_CONNECTION_STATE_CLOSED) {
     GST_DEBUG_OBJECT (self, "Already received close_notify");
     g_mutex_unlock (&priv->mutex);
     return GST_FLOW_EOS;
@@ -637,6 +636,8 @@ gst_dtls_connection_process (GstDtlsConnection * self, gpointer data, gsize len,
     return GST_FLOW_ERROR;
   }
 
+  g_warn_if_fail (!priv->bio_buffer);
+
   priv->bio_buffer = data;
   priv->bio_buffer_len = len;
   priv->bio_buffer_offset = 0;