ntp: add function to restart transmit timer

This commit is contained in:
Miroslav Lichvar 2014-08-19 15:51:59 +02:00
parent 0bdac2c7b3
commit ba283e6b6e

View file

@ -307,7 +307,7 @@ NCR_Finalise(void)
/* ================================================== */ /* ================================================== */
static void static void
start_initial_timeout(NCR_Instance inst) restart_timeout(NCR_Instance inst, double delay)
{ {
/* Check if we can transmit */ /* Check if we can transmit */
if (inst->tx_suspended) { if (inst->tx_suspended) {
@ -320,19 +320,26 @@ start_initial_timeout(NCR_Instance inst)
SCH_RemoveTimeout(inst->timeout_id); SCH_RemoveTimeout(inst->timeout_id);
/* Start new timer for transmission */ /* Start new timer for transmission */
inst->timeout_id = SCH_AddTimeoutInClass(INITIAL_DELAY, SAMPLING_SEPARATION, inst->timeout_id = SCH_AddTimeoutInClass(delay, SAMPLING_SEPARATION,
SAMPLING_RANDOMNESS, SAMPLING_RANDOMNESS,
SCH_NtpSamplingClass, SCH_NtpSamplingClass,
transmit_timeout, (void *)inst); transmit_timeout, (void *)inst);
inst->timer_running = 1;
}
/* ================================================== */
static void
start_initial_timeout(NCR_Instance inst)
{
if (!inst->timer_running) { if (!inst->timer_running) {
/* This will be the first transmission after mode change */ /* This will be the first transmission after mode change */
inst->timer_running = 1;
/* Mark source active */ /* Mark source active */
SRC_SetActive(inst->source); SRC_SetActive(inst->source);
} }
restart_timeout(inst, INITIAL_DELAY);
} }
/* ================================================== */ /* ================================================== */
@ -788,7 +795,6 @@ static void
transmit_timeout(void *arg) transmit_timeout(void *arg)
{ {
NCR_Instance inst = (NCR_Instance) arg; NCR_Instance inst = (NCR_Instance) arg;
double timeout_delay;
inst->timer_running = 0; inst->timer_running = 0;
@ -837,11 +843,7 @@ transmit_timeout(void *arg)
inst->presend_done = 1; inst->presend_done = 1;
/* Requeue timeout */ /* Requeue timeout */
inst->timer_running = 1; restart_timeout(inst, WARM_UP_DELAY);
inst->timeout_id = SCH_AddTimeoutInClass(WARM_UP_DELAY, SAMPLING_SEPARATION,
SAMPLING_RANDOMNESS,
SCH_NtpSamplingClass,
transmit_timeout, (void *)inst);
return; return;
} }
@ -884,12 +886,7 @@ transmit_timeout(void *arg)
} }
/* Restart timer for this message */ /* Restart timer for this message */
timeout_delay = get_transmit_delay(inst, 1, 0.0); restart_timeout(inst, get_transmit_delay(inst, 1, 0.0));
inst->timer_running = 1;
inst->timeout_id = SCH_AddTimeoutInClass(timeout_delay, SAMPLING_SEPARATION,
SAMPLING_RANDOMNESS,
SCH_NtpSamplingClass,
transmit_timeout, (void *)inst);
} }
@ -1339,11 +1336,7 @@ receive_packet(NTP_Packet *message, struct timeval *now, double now_err, NCR_Ins
/* Get rid of old timeout and start a new one */ /* Get rid of old timeout and start a new one */
assert(inst->timer_running); assert(inst->timer_running);
SCH_RemoveTimeout(inst->timeout_id); restart_timeout(inst, delay_time);
inst->timeout_id = SCH_AddTimeoutInClass(delay_time, SAMPLING_SEPARATION,
SAMPLING_RANDOMNESS,
SCH_NtpSamplingClass,
transmit_timeout, (void *)inst);
} }
/* Do measurement logging */ /* Do measurement logging */