Fix/Workaround a memory leak each time a device connects to BLE.
This commit is contained in:
parent
71842667a0
commit
09adb78b55
2 changed files with 7 additions and 1 deletions
|
@ -44,7 +44,7 @@ set(SDK_SOURCE_FILES
|
||||||
# FreeRTOS
|
# FreeRTOS
|
||||||
${NRF5_SDK_PATH}/external/freertos/source/croutine.c
|
${NRF5_SDK_PATH}/external/freertos/source/croutine.c
|
||||||
${NRF5_SDK_PATH}/external/freertos/source/event_groups.c
|
${NRF5_SDK_PATH}/external/freertos/source/event_groups.c
|
||||||
${NRF5_SDK_PATH}/external/freertos/source/portable/MemMang/heap_1.c
|
${NRF5_SDK_PATH}/external/freertos/source/portable/MemMang/heap_4.c
|
||||||
${NRF5_SDK_PATH}/external/freertos/source/list.c
|
${NRF5_SDK_PATH}/external/freertos/source/list.c
|
||||||
${NRF5_SDK_PATH}/external/freertos/source/queue.c
|
${NRF5_SDK_PATH}/external/freertos/source/queue.c
|
||||||
${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c
|
${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c
|
||||||
|
|
|
@ -268,11 +268,17 @@ void
|
||||||
npl_freertos_callout_init(struct ble_npl_callout *co, struct ble_npl_eventq *evq,
|
npl_freertos_callout_init(struct ble_npl_callout *co, struct ble_npl_eventq *evq,
|
||||||
ble_npl_event_fn *ev_cb, void *ev_arg)
|
ble_npl_event_fn *ev_cb, void *ev_arg)
|
||||||
{
|
{
|
||||||
|
// I added this 'if' because nimble seems to never delete the timers. I assume it wants to recycle them.
|
||||||
|
// This condition ensure that a new timer is created only if 'co' points to an uninitialized structure.
|
||||||
|
// If the struct contains an existing timer, no new timer is created, which prevent a significant memory leak.
|
||||||
|
// TODO Ensure that this workaround is valid and does not generate bad side-effect.
|
||||||
|
if(co->handle == NULL) {
|
||||||
memset(co, 0, sizeof(*co));
|
memset(co, 0, sizeof(*co));
|
||||||
co->handle = xTimerCreate("co", 1, pdFALSE, co, os_callout_timer_cb);
|
co->handle = xTimerCreate("co", 1, pdFALSE, co, os_callout_timer_cb);
|
||||||
co->evq = evq;
|
co->evq = evq;
|
||||||
ble_npl_event_init(&co->ev, ev_cb, ev_arg);
|
ble_npl_event_init(&co->ev, ev_cb, ev_arg);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ble_npl_error_t
|
ble_npl_error_t
|
||||||
npl_freertos_callout_reset(struct ble_npl_callout *co, ble_npl_time_t ticks)
|
npl_freertos_callout_reset(struct ble_npl_callout *co, ble_npl_time_t ticks)
|
||||||
|
|
Loading…
Reference in a new issue