diff options
author | Colin Guthrie <cguthrie@mandriva.org> | 2009-09-20 18:39:50 +0100 |
---|---|---|
committer | Colin Guthrie <cguthrie@mandriva.org> | 2009-10-01 09:08:31 +0100 |
commit | 9e447978eb9ed246762a07e52466384580834566 (patch) | |
tree | 668fa194a0228a06d3a395d9392a469d990111ff /src/modules/module-device-manager.c | |
parent | e47f385b09b2bd6e4c5dd2ba4c1b93a213ec1b5c (diff) |
device-manager: Some efficiency and safety tweaks
Diffstat (limited to 'src/modules/module-device-manager.c')
-rw-r--r-- | src/modules/module-device-manager.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c index fba4ebe6..5abcc75e 100644 --- a/src/modules/module-device-manager.c +++ b/src/modules/module-device-manager.c @@ -431,7 +431,7 @@ static uint32_t get_role_index(const char* role) { static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, const char *prefix) { role_indexes_t *indexes, highest_priority_available; pa_datum key; - pa_bool_t done; + pa_bool_t done, sink_mode; pa_assert(u); pa_assert(prefix); @@ -442,6 +442,8 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c } pa_zero(highest_priority_available); + sink_mode = (strcmp(prefix, "sink:") == 0); + done = !pa_database_first(u->database, &key, NULL); /* Find all existing devices with the same prefix so we find the highest priority device for each role */ @@ -465,7 +467,7 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c pa_bool_t found = FALSE; char *device_name = get_name(name, prefix); - if (strcmp(prefix, "sink:") == 0) { + if (sink_mode) { pa_sink *sink; PA_IDXSET_FOREACH(sink, u->core->sinks, idx) { @@ -944,15 +946,18 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) { pa_datum key, data; pa_bool_t done; - char* prefix; + char* prefix = NULL; uint32_t priority; pa_bool_t haschanged = FALSE; if (strncmp(device, "sink:", 5) == 0) prefix = pa_xstrdup("sink:"); - else + else if (strncmp(device, "source:", 7) == 0) prefix = pa_xstrdup("source:"); + if (!prefix) + goto fail; + priority = e->priority[role_index]; /* Now we need to load up all the other entries of this type and shuffle the priroities around */ |