From e6b15cf8251643aced0baf716939a6d0857fccfb Mon Sep 17 00:00:00 2001 From: Hemant Gupta Date: Wed, 13 Sep 2017 17:35:03 +0530 Subject: [PATCH] HID: Free process_repage_timer to prevent leak Usecase: 1) Perform BT on/off stress test 2) Check for memory leakage in code in subsequent BT on/off usecase Expectation No memory leak during BT on/off stress test Observed result Memory leakage in hid code where alarm process_repage_timer is not freed and only cancelled Fix: Free alarm process_repage_timer during HID Host deregstration Test: Checked with BT on/off usecase, and alarm process_repage_timer is now freed in every BT on/off usecase. Bug: 65657207 Change-Id: Iccecd126716a5660f4c37ddc917bacee84342297 --- stack/hid/hidh_api.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stack/hid/hidh_api.cc b/stack/hid/hidh_api.cc index 3fe2d28f0..22eee95db 100644 --- a/stack/hid/hidh_api.cc +++ b/stack/hid/hidh_api.cc @@ -230,11 +230,6 @@ void HID_HostInit(void) { uint8_t log_level = hh_cb.trace_level; memset(&hh_cb, 0, sizeof(tHID_HOST_CTB)); hh_cb.trace_level = log_level; - - for (size_t i = 0; i < HID_HOST_MAX_DEVICES; i++) { - hh_cb.devices[i].conn.process_repage_timer = - alarm_new("hid_devices_conn.process_repage_timer"); - } } /******************************************************************************* @@ -278,6 +273,10 @@ tHID_STATUS HID_HostRegister(tHID_HOST_DEV_CALLBACK* dev_cback) { hh_cb.callback = dev_cback; hh_cb.reg_flag = true; + for (size_t i = 0; i < HID_HOST_MAX_DEVICES; i++) { + hh_cb.devices[i].conn.process_repage_timer = + alarm_new("hid_devices_conn.process_repage_timer"); + } return (HID_SUCCESS); } @@ -296,6 +295,7 @@ tHID_STATUS HID_HostDeregister(void) { if (!hh_cb.reg_flag) return (HID_ERR_NOT_REGISTERED); for (i = 0; i < HID_HOST_MAX_DEVICES; i++) { + alarm_free(hh_cb.devices[i].conn.process_repage_timer); HID_HostRemoveDev(i); } -- 2.11.0