OSDN Git Service

HID: Free process_repage_timer to prevent leak
authorHemant Gupta <hemantg@codeaurora.org>
Wed, 13 Sep 2017 12:05:03 +0000 (17:35 +0530)
committerJack He <siyuanh@google.com>
Mon, 2 Oct 2017 18:38:38 +0000 (11:38 -0700)
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
(cherry picked from commit e6b15cf8251643aced0baf716939a6d0857fccfb)

stack/hid/hidh_api.cc

index 704426f..adbc931 100644 (file)
@@ -233,11 +233,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");
-  }
 }
 
 /*******************************************************************************
@@ -281,6 +276,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);
 }
 
@@ -299,6 +298,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);
   }