Use a SingletonPtr for the Timeout object in utest_shim.

Makes sure to initialize it, otherwize, it might be initialized in
interrupt context.
pull/2714/head
Vincent Coubard 2016-09-06 10:14:26 +01:00 committed by Anna Bridge
parent 3aeba87f41
commit 8a94c85eb0
1 changed files with 6 additions and 7 deletions

View File

@ -66,10 +66,7 @@ static volatile utest_v1_harness_callback_t minimal_callback;
static volatile utest_v1_harness_callback_t ticker_callback; static volatile utest_v1_harness_callback_t ticker_callback;
// Timeout object used to control the scheduling of test case callbacks // Timeout object used to control the scheduling of test case callbacks
static Timeout& utest_timeout_object() { SingletonPtr<Timeout> utest_timeout_object;
static Timeout timeout;
return timeout;
}
static void ticker_handler() static void ticker_handler()
{ {
@ -80,7 +77,9 @@ static void ticker_handler()
static int32_t utest_us_ticker_init() static int32_t utest_us_ticker_init()
{ {
UTEST_LOG_FUNCTION(); UTEST_LOG_FUNCTION();
// Ticker scheduler does not require any initialisation so return immediately // initialize the Timeout object to makes sure it is not initialized in
// interrupt context.
utest_timeout_object.get();
return 0; return 0;
} }
static void *utest_us_ticker_post(const utest_v1_harness_callback_t callback, timestamp_t delay_ms) static void *utest_us_ticker_post(const utest_v1_harness_callback_t callback, timestamp_t delay_ms)
@ -91,7 +90,7 @@ static void *utest_us_ticker_post(const utest_v1_harness_callback_t callback, ti
if (delay_ms) { if (delay_ms) {
ticker_callback = callback; ticker_callback = callback;
// fire the interrupt in 1000us * delay_ms // fire the interrupt in 1000us * delay_ms
utest_timeout_object().attach_us(ticker_handler, delay_us); utest_timeout_object->attach_us(ticker_handler, delay_us);
} }
else { else {
@ -105,7 +104,7 @@ static int32_t utest_us_ticker_cancel(void *handle)
{ {
UTEST_LOG_FUNCTION(); UTEST_LOG_FUNCTION();
(void) handle; (void) handle;
utest_timeout_object().detach(); utest_timeout_object->detach();
return 0; return 0;
} }
static int32_t utest_us_ticker_run() static int32_t utest_us_ticker_run()