Ping >------- Original Message ------- >Sender : Anchit Narang<anchit.n@xxxxxxxxxxx> Senior Software Engineer (2)/SRI-Delhi-SWC Group/Samsung Electronics >Date : Jun 23, 2015 14:54 (GMT+05:30) >Title : [PATCH] android/tester-main.c : Fixed Memory leak >This patch fixes memory leak issues in various functions >by allocating memory to structure step only after intial >checks are performed as control was returning from these >checks without freeing memory allocated to it. >--- > android/tester-main.c | 36 +++++++++++++++++++++++++++--------- > 1 file changed, 27 insertions(+), 9 deletions(-) > >diff --git a/android/tester-main.c b/android/tester-main.c >index 19400fc..3a55792 100644 >--- a/android/tester-main.c >+++ b/android/tester-main.c >@@ -329,7 +329,7 @@ static void mgmt_debug(const char *str, void *user_data) > static bool hciemu_post_encr_hook(const void *data, uint16_t len, > void *user_data) > { >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > /* > * Expected data: status (1 octet) + conn. handle (2 octets) + >@@ -338,6 +338,8 @@ static bool hciemu_post_encr_hook(const void *data, uint16_t len, > if (len < 4) > return true; > >+ step = g_new0(struct step, 1); >+ > step->callback = ((uint8_t *)data)[3] ? CB_EMU_ENCRYPTION_ENABLED : > CB_EMU_ENCRYPTION_DISABLED; > >@@ -2961,13 +2963,15 @@ void emu_add_rfcomm_server_action(void) > struct step *current_data_step = queue_peek_head(data->steps); > struct bt_action_data *rfcomm_data = current_data_step->set_data; > struct bthost *bthost; >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > if (!rfcomm_data) { > tester_warn("Invalid l2cap_data params"); > return; > } > >+ step = g_new0(struct step, 1); >+ > bthost = hciemu_client_get_host(data->hciemu); > > bthost_add_rfcomm_server(bthost, rfcomm_data->channel, >@@ -3010,7 +3014,7 @@ void bluetooth_disable_action(void) > void bt_set_property_action(void) > { > struct test_data *data = tester_get_data(); >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > struct step *current_data_step = queue_peek_head(data->steps); > bt_property_t *prop; > >@@ -3020,6 +3024,8 @@ void bt_set_property_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > prop = (bt_property_t *)current_data_step->set_data; > > step->action_status = data->if_bluetooth->set_adapter_property(prop); >@@ -3030,7 +3036,7 @@ void bt_set_property_action(void) > void bt_get_property_action(void) > { > struct test_data *data = tester_get_data(); >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > struct step *current_data_step = queue_peek_head(data->steps); > bt_property_t *prop; > >@@ -3040,6 +3046,8 @@ void bt_get_property_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > prop = (bt_property_t *)current_data_step->set_data; > > step->action_status = data->if_bluetooth->get_adapter_property( >@@ -3072,7 +3080,7 @@ void bt_get_device_props_action(void) > { > struct test_data *data = tester_get_data(); > struct step *current_data_step = queue_peek_head(data->steps); >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > if (!current_data_step->set_data) { > tester_debug("bdaddr not defined"); >@@ -3080,6 +3088,8 @@ void bt_get_device_props_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > step->action_status = > data->if_bluetooth->get_remote_device_properties( > current_data_step->set_data); >@@ -3092,7 +3102,7 @@ void bt_get_device_prop_action(void) > struct test_data *data = tester_get_data(); > struct step *current_data_step = queue_peek_head(data->steps); > struct bt_action_data *action_data = current_data_step->set_data; >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > if (!action_data) { > tester_warn("No arguments for 'get remote device prop' req."); >@@ -3100,6 +3110,8 @@ void bt_get_device_prop_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > step->action_status = data->if_bluetooth->get_remote_device_property( > action_data->addr, > action_data->prop_type); >@@ -3112,7 +3124,7 @@ void bt_set_device_prop_action(void) > struct test_data *data = tester_get_data(); > struct step *current_data_step = queue_peek_head(data->steps); > struct bt_action_data *action_data = current_data_step->set_data; >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > if (!action_data) { > tester_warn("No arguments for 'set remote device prop' req."); >@@ -3120,6 +3132,8 @@ void bt_set_device_prop_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > step->action_status = data->if_bluetooth->set_remote_device_property( > action_data->addr, > action_data->prop); >@@ -3132,7 +3146,7 @@ void bt_create_bond_action(void) > struct test_data *data = tester_get_data(); > struct step *current_data_step = queue_peek_head(data->steps); > struct bt_action_data *action_data = current_data_step->set_data; >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > if (!action_data || !action_data->addr) { > tester_warn("Bad arguments for 'create bond' req."); >@@ -3140,6 +3154,8 @@ void bt_create_bond_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > step->action_status = > data->if_bluetooth->create_bond(action_data->addr, > action_data->transport_type ? >@@ -3154,7 +3170,7 @@ void bt_pin_reply_accept_action(void) > struct test_data *data = tester_get_data(); > struct step *current_data_step = queue_peek_head(data->steps); > struct bt_action_data *action_data = current_data_step->set_data; >- struct step *step = g_new0(struct step, 1); >+ struct step *step; > > if (!action_data || !action_data->addr || !action_data->pin) { > tester_warn("Bad arguments for 'pin reply' req."); >@@ -3162,6 +3178,8 @@ void bt_pin_reply_accept_action(void) > return; > } > >+ step = g_new0(struct step, 1); >+ > step->action_status = data->if_bluetooth->pin_reply(action_data->addr, > TRUE, > action_data->pin_len, >-- >1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html