From 787652dd901f67d9c8fcefe01b274d9b4c220f54 Mon Sep 17 00:00:00 2001 From: JengHyun Kang Date: Fri, 12 Oct 2018 16:00:46 +0900 Subject: [PATCH] evdev: free aux_data struct in fallback destroy function Change-Id: Ief8b7ed7bf1aea714e635ca2661450b519012015 --- src/evdev-fallback.c | 37 ++++++++++++++++++------------------- src/evdev.c | 13 ------------- src/evdev.h | 4 ---- 3 files changed, 18 insertions(+), 36 deletions(-) mode change 100755 => 100644 src/evdev-fallback.c diff --git a/src/evdev-fallback.c b/src/evdev-fallback.c old mode 100755 new mode 100644 index d21928d7..c083ca2a --- a/src/evdev-fallback.c +++ b/src/evdev-fallback.c @@ -1181,6 +1181,22 @@ fallback_return_to_neutral_state(struct fallback_dispatch *dispatch, memset(dispatch->hw_key_mask, 0, sizeof(dispatch->last_hw_key_mask)); } +static void +fallback_dispatch_free_aux_data(struct fallback_dispatch *dispatch) +{ + int i; + struct mt_aux_data *aux_data; + + for (i = 0; i < (int)dispatch->mt.slots_len; i++) { + list_for_each_safe(aux_data, &dispatch->mt.aux_data_list[i], link) { + list_remove(&aux_data->link); + free(aux_data); + } + list_remove(&dispatch->mt.aux_data_list[i]); + } + free(dispatch->mt.aux_data_list); +} + static void fallback_interface_suspend(struct evdev_dispatch *evdev_dispatch, struct evdev_device *device) @@ -1315,6 +1331,8 @@ fallback_interface_destroy(struct evdev_dispatch *evdev_dispatch) libinput_timer_destroy(&dispatch->debounce.timer); libinput_timer_destroy(&dispatch->debounce.timer_short); + fallback_dispatch_free_aux_data(dispatch); + free(dispatch->mt.slots); free(dispatch); } @@ -1541,25 +1559,6 @@ failed: } } -static void -fallback_device_interface_free_aux_data(struct evdev_dispatch *evdev_dispatch) -{ - int i; - struct fallback_dispatch *dispatch; - struct mt_aux_data *aux_data; - - dispatch = fallback_dispatch(evdev_dispatch); - - for (i = 0; i < (int)dispatch->mt.slots_len; i++) { - list_for_each_safe(aux_data, &dispatch->mt.aux_data_list[i], link) { - list_remove(&aux_data->link); - free(aux_data); - } - list_remove(&dispatch->mt.aux_data_list[i]); - } - free(dispatch->mt.aux_data_list); -} - struct evdev_dispatch_device_interface fallback_device_interface = { .set_aux_data = fallback_device_interface_set_aux_data }; diff --git a/src/evdev.c b/src/evdev.c index b6e5ab48..9cdd2eb1 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -3179,7 +3179,6 @@ evdev_device_destroy(struct evdev_device *device) struct evdev_dispatch *dispatch; dispatch = device->dispatch; - evdev_device_free_aux_data(device); if (dispatch) dispatch->interface->destroy(dispatch); @@ -3266,15 +3265,3 @@ evdev_device_set_aux_data(struct evdev_device *device, uint32_t code) dispatch->device_interface->set_aux_data(dispatch, code); } } - -void -evdev_device_free_aux_data(struct evdev_device *device) -{ - struct evdev_dispatch *dispatch = device->dispatch; - if (!dispatch) return; - if (!dispatch->device_interface) return; - - if (dispatch->device_interface->free_aux_data) { - dispatch->device_interface->free_aux_data(dispatch, code); - } -} diff --git a/src/evdev.h b/src/evdev.h index 23ff12c7..519723a4 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -356,7 +356,6 @@ struct evdev_dispatch_interface { struct evdev_dispatch_device_interface { void (*set_aux_data) (struct evdev_dispatch *dispatch, uint32_t code); - void (*free_aux_data) (struct evdev_dispatch *dispatch); }; enum evdev_dispatch_type { @@ -1077,7 +1076,4 @@ evdev_device_has_aux_data(struct evdev_device *device, uint32_t code); void evdev_device_set_aux_data(struct evdev_device *device, uint32_t code); - -void -evdev_device_free_aux_data(struct evdev_device *device); #endif /* EVDEV_H */ -- 2.34.1