summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-08-10 00:33:47 +0000
committerLennart Poettering <lennart@poettering.net>2007-08-10 00:33:47 +0000
commit10b135a4bf767255ba8497ab51bce68688b6a28f (patch)
treee4825f5012d34d67366d3a6e67f093f978f4e552
parent1e5ca51016de2b6ea6f9aa8b23e00d62a851b541 (diff)
avoid duplicate loading of modules
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1613 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r--src/modules/module-hal-detect.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c
index ed21f4de..d73ca0ce 100644
--- a/src/modules/module-hal-detect.c
+++ b/src/modules/module-hal-detect.c
@@ -299,7 +299,8 @@ static struct device* hal_device_add(struct userdata *u, const char *udi) {
pa_assert(u);
pa_assert(u->capability);
-
+ pa_assert(!pa_hashmap_get(u->devices, udi));
+
#ifdef HAVE_ALSA
if (strcmp(u->capability, CAPABILITY_ALSA) == 0)
m = hal_device_load_alsa(u, udi, &sink_name, &source_name);
@@ -374,22 +375,25 @@ static dbus_bool_t device_has_capability(LibHalContext *context, const char *udi
static void device_added_time_cb(pa_mainloop_api *ea, pa_time_event *ev, const struct timeval *tv, void *userdata) {
DBusError error;
struct timerdata *td = userdata;
- int b;
- struct device *d;
dbus_error_init(&error);
-
- b = libhal_device_exists(td->u->context, td->udi, &error);
-
- if (dbus_error_is_set(&error)) {
- pa_log_error("Error adding device: %s: %s", error.name, error.message);
- dbus_error_free(&error);
- } else if (b) {
- if (!(d = hal_device_add(td->u, td->udi)))
- pa_log_debug("Not loaded device %s", td->udi);
- else {
- if (d->sink_name)
- pa_scache_play_item_by_name(td->u->core, "pulse-hotplug", d->sink_name, PA_VOLUME_NORM, 0);
+
+ if (!pa_hashmap_get(td->u->devices, td->udi)) {
+ int b;
+ struct device *d;
+
+ b = libhal_device_exists(td->u->context, td->udi, &error);
+
+ if (dbus_error_is_set(&error)) {
+ pa_log_error("Error adding device: %s: %s", error.name, error.message);
+ dbus_error_free(&error);
+ } else if (b) {
+ if (!(d = hal_device_add(td->u, td->udi)))
+ pa_log_debug("Not loaded device %s", td->udi);
+ else {
+ if (d->sink_name)
+ pa_scache_play_item_by_name(td->u->core, "pulse-hotplug", d->sink_name, PA_VOLUME_NORM, 0);
+ }
}
}
@@ -406,6 +410,9 @@ static void device_added_cb(LibHalContext *context, const char *udi) {
int good = 0;
pa_assert_se(u = libhal_ctx_get_user_data(context));
+
+ if (pa_hashmap_get(u->devices, udi))
+ return;
pa_log_debug("HAL Device added: %s", udi);