Commit 76bd50b0 authored by Youness Alaoui's avatar Youness Alaoui

Do not destroy the retransmission timer that just got created by priv_schedule_tick

parent b8483f6c
...@@ -1113,6 +1113,8 @@ priv_process_pending_bindings (TurnPriv *priv) ...@@ -1113,6 +1113,8 @@ priv_process_pending_bindings (TurnPriv *priv)
static gboolean static gboolean
priv_retransmissions_tick_unlocked (TurnPriv *priv) priv_retransmissions_tick_unlocked (TurnPriv *priv)
{ {
gboolean ret = FALSE;
if (priv->current_binding_msg) { if (priv->current_binding_msg) {
switch (stun_timer_refresh (&priv->current_binding_msg->timer)) { switch (stun_timer_refresh (&priv->current_binding_msg->timer)) {
case STUN_USAGE_TIMER_RETURN_TIMEOUT: case STUN_USAGE_TIMER_RETURN_TIMEOUT:
...@@ -1137,19 +1139,24 @@ priv_retransmissions_tick_unlocked (TurnPriv *priv) ...@@ -1137,19 +1139,24 @@ priv_retransmissions_tick_unlocked (TurnPriv *priv)
nice_socket_send (priv->base_socket, &priv->server_addr, nice_socket_send (priv->base_socket, &priv->server_addr,
stun_message_length (&priv->current_binding_msg->message), stun_message_length (&priv->current_binding_msg->message),
(gchar *)priv->current_binding_msg->buffer); (gchar *)priv->current_binding_msg->buffer);
ret = TRUE;
break; break;
case STUN_USAGE_TIMER_RETURN_SUCCESS: case STUN_USAGE_TIMER_RETURN_SUCCESS:
ret = TRUE;
break; break;
} }
} }
if (ret)
priv_schedule_tick (priv); priv_schedule_tick (priv);
return FALSE; return ret;
} }
static gboolean static gboolean
priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv) priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv)
{ {
gboolean ret = FALSE;
if (priv->current_create_permission_msg) { if (priv->current_create_permission_msg) {
switch (stun_timer_refresh (&priv->current_create_permission_msg->timer)) { switch (stun_timer_refresh (&priv->current_create_permission_msg->timer)) {
case STUN_USAGE_TIMER_RETURN_TIMEOUT: case STUN_USAGE_TIMER_RETURN_TIMEOUT:
...@@ -1187,21 +1194,23 @@ priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv) ...@@ -1187,21 +1194,23 @@ priv_retransmissions_create_permission_tick_unlocked (TurnPriv *priv)
nice_socket_send (priv->base_socket, &priv->server_addr, nice_socket_send (priv->base_socket, &priv->server_addr,
stun_message_length (&priv->current_create_permission_msg->message), stun_message_length (&priv->current_create_permission_msg->message),
(gchar *)priv->current_create_permission_msg->buffer); (gchar *)priv->current_create_permission_msg->buffer);
ret = TRUE;
break; break;
case STUN_USAGE_TIMER_RETURN_SUCCESS: case STUN_USAGE_TIMER_RETURN_SUCCESS:
ret = TRUE;
break; break;
} }
} }
if (ret)
priv_schedule_tick (priv); priv_schedule_tick (priv);
return FALSE; return ret;
} }
static gboolean static gboolean
priv_retransmissions_tick (gpointer pointer) priv_retransmissions_tick (gpointer pointer)
{ {
TurnPriv *priv = pointer; TurnPriv *priv = pointer;
gboolean ret;
agent_lock (); agent_lock ();
if (g_source_is_destroyed (g_main_current_source ())) { if (g_source_is_destroyed (g_main_current_source ())) {
...@@ -1211,8 +1220,7 @@ priv_retransmissions_tick (gpointer pointer) ...@@ -1211,8 +1220,7 @@ priv_retransmissions_tick (gpointer pointer)
return FALSE; return FALSE;
} }
ret = priv_retransmissions_tick_unlocked (priv); if (priv_retransmissions_tick_unlocked (priv) == FALSE) {
if (ret == FALSE) {
if (priv->tick_source_channel_bind != NULL) { if (priv->tick_source_channel_bind != NULL) {
g_source_destroy (priv->tick_source_channel_bind); g_source_destroy (priv->tick_source_channel_bind);
g_source_unref (priv->tick_source_channel_bind); g_source_unref (priv->tick_source_channel_bind);
...@@ -1221,14 +1229,13 @@ priv_retransmissions_tick (gpointer pointer) ...@@ -1221,14 +1229,13 @@ priv_retransmissions_tick (gpointer pointer)
} }
agent_unlock (); agent_unlock ();
return ret; return FALSE;
} }
static gboolean static gboolean
priv_retransmissions_create_permission_tick (gpointer pointer) priv_retransmissions_create_permission_tick (gpointer pointer)
{ {
TurnPriv *priv = pointer; TurnPriv *priv = pointer;
gboolean ret;
agent_lock (); agent_lock ();
if (g_source_is_destroyed (g_main_current_source ())) { if (g_source_is_destroyed (g_main_current_source ())) {
...@@ -1238,8 +1245,7 @@ priv_retransmissions_create_permission_tick (gpointer pointer) ...@@ -1238,8 +1245,7 @@ priv_retransmissions_create_permission_tick (gpointer pointer)
return FALSE; return FALSE;
} }
ret = priv_retransmissions_create_permission_tick_unlocked (priv); if (priv_retransmissions_create_permission_tick_unlocked (priv) == FALSE) {
if (ret == FALSE) {
if (priv->tick_source_create_permission != NULL) { if (priv->tick_source_create_permission != NULL) {
g_source_destroy (priv->tick_source_create_permission); g_source_destroy (priv->tick_source_create_permission);
g_source_unref (priv->tick_source_create_permission); g_source_unref (priv->tick_source_create_permission);
...@@ -1248,7 +1254,7 @@ priv_retransmissions_create_permission_tick (gpointer pointer) ...@@ -1248,7 +1254,7 @@ priv_retransmissions_create_permission_tick (gpointer pointer)
} }
agent_unlock (); agent_unlock ();
return ret; return FALSE;
} }
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment