Fix a bug in the timing wheel

Properly propagate vector allocated in advance_cpu_time_base() for a
special case, when the expired_user_data parameter passed to
timing_wheel_advance() is NULL and the only expired event is in the
overflow pool.

Change-Id: I5cefab0e881958334791aaa6354ec08225af23c1
Signed-off-by: Klement Sekera <ksekera@cisco.com>
This commit is contained in:
Klement Sekera
2016-11-11 05:58:10 +01:00
committed by Dave Barach
parent 7f3c36bb85
commit e5af88c820

View File

@ -468,7 +468,7 @@ expire_bin (timing_wheel_t * w,
}
/* Called rarely. 32 bit times should only overflow every 4 seconds or so on a fast machine. */
static void
static u32 *
advance_cpu_time_base (timing_wheel_t * w, u32 * expired_user_data)
{
timing_wheel_level_t *l;
@ -519,6 +519,7 @@ advance_cpu_time_base (timing_wheel_t * w, u32 * expired_user_data)
}));
/* *INDENT-ON* */
}
return expired_user_data;
}
static u32 *
@ -683,7 +684,7 @@ timing_wheel_advance (timing_wheel_t * w, u64 advance_cpu_time,
/* Don't advance until necessary. */
while (PREDICT_FALSE
(advance_time_index >= w->time_index_next_cpu_time_base_update))
advance_cpu_time_base (w, expired_user_data);
expired_user_data = advance_cpu_time_base (w, expired_user_data);
if (next_expiring_element_cpu_time)
{