diff --git a/src/profile.c b/src/profile.c
index 175d8c7..0b5734f 100644
--- a/src/profile.c
+++ b/src/profile.c
g_free(l2cap);
l2cap = NULL;
g_clear_error(&err);
+ goto failed;
} else {
if (psm == 0)
bt_io_get(io, NULL, BT_IO_OPT_PSM, &psm,
g_free(rfcomm);
rfcomm = NULL;
g_clear_error(&err);
+ goto failed;
} else {
if (chan == 0)
bt_io_get(io, NULL, BT_IO_OPT_CHANNEL, &chan,
return ext_register_record(ext, l2cap, rfcomm,
adapter_get_address(adapter));
+
+failed:
+ if (l2cap) {
+ ext->servers = g_slist_remove(ext->servers, l2cap);
+ ext_io_destroy(l2cap);
+ }
+ if (rfcomm) {
+ ext->servers = g_slist_remove(ext->servers, rfcomm);
+ ext_io_destroy(rfcomm);
+ }
+
+ return 0;
}
static struct ext_profile *find_ext(struct btd_profile *p)