soc: qcom: service-locator: Free PD list after client use
Currently, when a client invokes the service-locator to get the domain list for a service, a data structure is dynamically allocated to hold this information, and that is given to the client for use. However, after the client uses the domain list, the data structure is not freed, resulting in a memory leak. Free domain list data structure after client use to fix memory leak. Change-Id: I2b87afefbb35c2c296b4267450fa3152e3725ab9 Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
This commit is contained in:
parent
9713572a3e
commit
d7a4d79fa6
1 changed files with 7 additions and 5 deletions
|
@ -251,7 +251,6 @@ static int service_locator_send_msg(struct pd_qmi_client_data *pd)
|
|||
req->domain_offset_valid = true;
|
||||
req->domain_offset = 0;
|
||||
|
||||
pd->domain_list = NULL;
|
||||
do {
|
||||
req->domain_offset += domains_read;
|
||||
rc = servreg_loc_send_msg(&req_desc, &resp_desc, req, resp,
|
||||
|
@ -281,6 +280,7 @@ static int service_locator_send_msg(struct pd_qmi_client_data *pd)
|
|||
pr_err("Service Locator DB updated for client %s\n",
|
||||
pd->client_name);
|
||||
kfree(pd->domain_list);
|
||||
pd->domain_list = NULL;
|
||||
rc = -EAGAIN;
|
||||
goto out;
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ int get_service_location(char *client_name, char *service_name,
|
|||
goto err;
|
||||
}
|
||||
|
||||
pqcd = kmalloc(sizeof(struct pd_qmi_client_data), GFP_KERNEL);
|
||||
pqcd = kzalloc(sizeof(struct pd_qmi_client_data), GFP_KERNEL);
|
||||
if (!pqcd) {
|
||||
rc = -ENOMEM;
|
||||
pr_err("Allocation failed\n");
|
||||
|
@ -401,7 +401,7 @@ static void pd_locator_work(struct work_struct *work)
|
|||
pr_err("Unable to connect to service locator!, rc = %d\n", rc);
|
||||
pdqw->notifier->notifier_call(pdqw->notifier,
|
||||
LOCATOR_DOWN, NULL);
|
||||
goto err;
|
||||
goto err_init_servloc;
|
||||
}
|
||||
rc = service_locator_send_msg(data);
|
||||
if (rc) {
|
||||
|
@ -409,11 +409,13 @@ static void pd_locator_work(struct work_struct *work)
|
|||
data->service_name, data->client_name, rc);
|
||||
pdqw->notifier->notifier_call(pdqw->notifier,
|
||||
LOCATOR_DOWN, NULL);
|
||||
goto err;
|
||||
goto err_servloc_send_msg;
|
||||
}
|
||||
pdqw->notifier->notifier_call(pdqw->notifier, LOCATOR_UP, data);
|
||||
|
||||
err:
|
||||
err_servloc_send_msg:
|
||||
kfree(data->domain_list);
|
||||
err_init_servloc:
|
||||
kfree(data);
|
||||
kfree(pdqw);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue