...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