@@ -829,9 +829,6 @@ static void store_remote_seps(struct a2dp_channel *chan)
char *data;
gsize length = 0;
- if (queue_isempty(chan->seps))
- return;
-
ba2str(device_get_address(device), dst_addr);
snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
@@ -2074,6 +2071,11 @@ static struct a2dp_remote_sep *register_remote_sep(void *data, void *user_data)
if (sep)
return sep;
+ if (!avdtp_get_codec(rsep)) {
+ error("Unable to get remote sep codec");
+ return NULL;
+ }
+
sep = new0(struct a2dp_remote_sep, 1);
sep->chan = chan;
sep->sep = rsep;
@@ -2148,6 +2150,7 @@ static void load_remote_sep(struct a2dp_channel *chan, GKeyFile *key_file,
struct avdtp_remote_sep *rsep;
uint8_t lseid, rseid;
char *value;
+ bool update = false;
if (!seids)
return;
@@ -2206,10 +2209,19 @@ static void load_remote_sep(struct a2dp_channel *chan, GKeyFile *key_file,
}
sep = register_remote_sep(rsep, chan);
- if (sep)
- sep->from_cache = true;
+ if (!sep) {
+ avdtp_unregister_remote_sep(chan->session, rsep);
+ update = true;
+ continue;
+ }
+
+ sep->from_cache = true;
}
+ /* Update cache */
+ if (update)
+ store_remote_seps(chan);
+
value = g_key_file_get_string(key_file, "Endpoints", "LastUsed", NULL);
if (!value)
return;