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)
committerAndre Eisenbach <eisenbach@google.com>
Mon, 2 Oct 2017 18:21:05 +0000 (18:21 +0000)
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

index 3fe2d28..22eee95 100644 (file)
@@ -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);
   }