agent: Prevent gather from being called multiple times
authorOlivier Crête <olivier.crete@collabora.com>
Fri, 28 Mar 2014 01:09:15 +0000 (21:09 -0400)
committerOlivier Crête <olivier.crete@collabora.com>
Sun, 30 Mar 2014 06:05:51 +0000 (02:05 -0400)
This can cause odd behaviors as it is not a idempotent function.

agent/agent.c
agent/stream.h

index 0f48fbc..fe32b27 100644 (file)
@@ -2123,6 +2123,12 @@ nice_agent_gather_candidates (
     return FALSE;
   }
 
+  if (stream->gathering_started) {
+    /* Stream is already gathering, ignore this call */
+    agent_unlock_and_emit (agent);
+    return TRUE;
+  }
+
   nice_debug ("Agent %p : In %s mode, starting candidate gathering.", agent,
       agent->full_mode ? "ICE-FULL" : "ICE-LITE");
 
@@ -2276,7 +2282,7 @@ nice_agent_gather_candidates (
   }
 
   stream->gathering = TRUE;
-
+  stream->gathering_started = TRUE;
 
   /* Only signal the new candidates after we're sure that the gathering was
    * succesfful. But before sending gathering-done */
index 08c39c5..96a478b 100644 (file)
@@ -72,6 +72,7 @@ struct _Stream
   gchar remote_ufrag[NICE_STREAM_MAX_UFRAG];
   gchar remote_password[NICE_STREAM_MAX_PWD];
   gboolean gathering;
+  gboolean gathering_started;
   gint tos;
 };