summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/hfp.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/plugins/hfp.c b/plugins/hfp.c
index 24cc127a..5fe6a2c1 100644
--- a/plugins/hfp.c
+++ b/plugins/hfp.c
@@ -428,10 +428,12 @@ static int hfp_create_modem(const char *device)
ofono_info("Using device: %s", device);
modem = ofono_modem_create(NULL, "hfp");
+ if (modem == NULL)
+ return -ENOMEM;
data = g_try_new0(struct hfp_data, 1);
if (!data)
- return -ENOMEM;
+ goto free;
data->hf_features |= HF_FEATURE_3WAY;
data->hf_features |= HF_FEATURE_CLIP;
@@ -440,12 +442,19 @@ static int hfp_create_modem(const char *device)
data->hf_features |= HF_FEATURE_ENHANCED_CALL_CONTROL;
data->handsfree_path = g_strdup(device);
+ if (data->handsfree_path == NULL)
+ goto free;
ofono_modem_set_data(modem, data);
-
ofono_modem_register(modem);
return 0;
+
+free:
+ g_free(data);
+ ofono_modem_remove(modem);
+
+ return -ENOMEM;
}
static void parse_uuids(DBusMessageIter *i, const char *device)