diff options
| author | Colin Guthrie <cguthrie@mandriva.org> | 2009-09-20 18:39:50 +0100 | 
|---|---|---|
| committer | Colin Guthrie <cguthrie@mandriva.org> | 2009-11-11 17:44:25 +0000 | 
| commit | 6e67653aeed4a433d1ba1f4d0380d973e010e36c (patch) | |
| tree | c7c7ace7e231ed6264fa82ff13b89552bd6f5022 /src/modules | |
| parent | 26f1ec7e0eaca1a797ab0e6479a3b02f0555df8d (diff) | |
device-manager: Some efficiency and safety tweaks
Diffstat (limited to 'src/modules')
| -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 */  | 
