...and move creation of cb_data structures closer to their usage point
in order to prevent them from leaking when earlier code fails.
---
drivers/qmimodem/network-registration.c | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
diff --git a/drivers/qmimodem/network-registration.c
b/drivers/qmimodem/network-registration.c
index a3f9cf9..d0f4853 100644
--- a/drivers/qmimodem/network-registration.c
+++ b/drivers/qmimodem/network-registration.c
@@ -188,8 +188,6 @@ static void qmi_registration_status(struct ofono_netreg
*netreg,
return;
CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
-
- g_free(cbd);
}
static void qmi_current_operator(struct ofono_netreg *netreg,
@@ -300,8 +298,6 @@ static void qmi_list_operators(struct ofono_netreg *netreg,
return;
CALLBACK_WITH_FAILURE(cb, 0, NULL, cbd->data);
-
- g_free(cbd);
}
static void register_net_cb(struct qmi_result *result, void *user_data)
@@ -330,7 +326,7 @@ static void qmi_register_auto(struct ofono_netreg *netreg,
ofono_netreg_register_cb_t cb, void *user_data)
{
struct netreg_data *data = ofono_netreg_get_data(netreg);
- struct cb_data *cbd = cb_data_new(cb, user_data);
+ struct cb_data *cbd;
struct qmi_param *param;
DBG("");
@@ -340,6 +336,8 @@ static void qmi_register_auto(struct ofono_netreg *netreg,
if (!param)
goto error;
+ cbd = cb_data_new(cb, user_data);
+
if (qmi_service_send(data->nas, QMI_NAS_REGISTER_NET, param,
register_net_cb, cbd, g_free) > 0)
return;
@@ -347,9 +345,7 @@ static void qmi_register_auto(struct ofono_netreg *netreg,
qmi_param_free(param);
error:
- CALLBACK_WITH_FAILURE(cb, cbd->data);
-
- g_free(cbd);
+ CALLBACK_WITH_FAILURE(cb, user_data);
}
static void qmi_register_manual(struct ofono_netreg *netreg,
@@ -357,7 +353,7 @@ static void qmi_register_manual(struct ofono_netreg *netreg,
ofono_netreg_register_cb_t cb, void *user_data)
{
struct netreg_data *data = ofono_netreg_get_data(netreg);
- struct cb_data *cbd = cb_data_new(cb, user_data);
+ struct cb_data *cbd;
struct qmi_nas_param_register_manual_info info;
struct qmi_param *param;
@@ -375,6 +371,8 @@ static void qmi_register_manual(struct ofono_netreg *netreg,
qmi_param_append(param, QMI_NAS_PARAM_REGISTER_MANUAL_INFO,
sizeof(info), &info);
+ cbd = cb_data_new(cb, user_data);
+
if (qmi_service_send(data->nas, QMI_NAS_REGISTER_NET, param,
register_net_cb, cbd, g_free) > 0)
return;
@@ -382,9 +380,7 @@ static void qmi_register_manual(struct ofono_netreg *netreg,
qmi_param_free(param);
error:
- CALLBACK_WITH_FAILURE(cb, cbd->data);
-
- g_free(cbd);
+ CALLBACK_WITH_FAILURE(cb, user_data);
}
static int dbm_to_strength(int8_t dbm)
@@ -446,8 +442,6 @@ static void qmi_signal_strength(struct ofono_netreg *netreg,
return;
CALLBACK_WITH_FAILURE(cb, -1, cbd->data);
-
- g_free(cbd);
}
static void event_notify(struct qmi_result *result, void *user_data)
--
2.9.3
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono