summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/module-default-device-restore.c16
-rw-r--r--src/modules/module-device-restore.c10
-rw-r--r--src/modules/module-stream-restore.c10
-rw-r--r--src/modules/module-volume-restore.c2
-rw-r--r--src/pulsecore/core-util.c23
-rw-r--r--src/pulsecore/core-util.h2
6 files changed, 32 insertions, 31 deletions
diff --git a/src/modules/module-default-device-restore.c b/src/modules/module-default-device-restore.c
index 4037881f..d2cc24f3 100644
--- a/src/modules/module-default-device-restore.c
+++ b/src/modules/module-default-device-restore.c
@@ -154,28 +154,16 @@ static void subscribe_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t id
int pa__init(pa_module *m) {
struct userdata *u;
- char hn[256], *fn;
pa_assert(m);
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
- if (!pa_get_host_name(hn, sizeof(hn)))
+ if (!(u->sink_filename = pa_state_path("default-sink", TRUE)))
goto fail;
- fn = pa_sprintf_malloc("default-sink.%s", hn);
- u->sink_filename = pa_state_path(fn);
- pa_xfree(fn);
-
- if (!u->sink_filename)
- goto fail;
-
- fn = pa_sprintf_malloc("default-source.%s", hn);
- u->source_filename = pa_state_path(fn);
- pa_xfree(fn);
-
- if (!u->source_filename)
+ if (!(u->source_filename = pa_state_path("default-source", TRUE)))
goto fail;
load(u);
diff --git a/src/modules/module-device-restore.c b/src/modules/module-device-restore.c
index fcd40219..3d731f12 100644
--- a/src/modules/module-device-restore.c
+++ b/src/modules/module-device-restore.c
@@ -284,7 +284,6 @@ int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
char *fname, *fn;
- char hn[256];
pa_sink *sink;
pa_source *source;
uint32_t idx;
@@ -321,11 +320,12 @@ int pa__init(pa_module*m) {
u->source_fixate_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_FIXATE], PA_HOOK_EARLY, (pa_hook_cb_t) source_fixate_hook_callback, u);
}
- if (!pa_get_host_name(hn, sizeof(hn)))
- goto fail;
+ /* We include the host identifier in the file name because gdbm
+ * files are CPU dependant, and we don't want things to go wrong
+ * if we are on a multiarch system. */
- fn = pa_sprintf_malloc("device-volumes.%s."CANONICAL_HOST".gdbm", hn);
- fname = pa_state_path(fn);
+ fn = pa_sprintf_malloc("device-volumes."CANONICAL_HOST".gdbm");
+ fname = pa_state_path(fn, TRUE);
pa_xfree(fn);
if (!fname)
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index b6d7b0f3..ec4e7c79 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -666,7 +666,6 @@ int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
char *fname, *fn;
- char hn[256];
pa_sink_input *si;
pa_source_output *so;
uint32_t idx;
@@ -714,11 +713,12 @@ int pa__init(pa_module*m) {
if (restore_volume || restore_muted)
u->sink_input_fixate_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_FIXATE], PA_HOOK_EARLY, (pa_hook_cb_t) sink_input_fixate_hook_callback, u);
- if (!pa_get_host_name(hn, sizeof(hn)))
- goto fail;
+ /* We include the host identifier in the file name because gdbm
+ * files are CPU dependant, and we don't want things to go wrong
+ * if we are on a multiarch system. */
- fn = pa_sprintf_malloc("stream-volumes.%s."CANONICAL_HOST".gdbm", hn);
- fname = pa_state_path(fn);
+ fn = pa_sprintf_malloc("stream-volumes."CANONICAL_HOST".gdbm");
+ fname = pa_state_path(fn, TRUE);
pa_xfree(fn);
if (!fname)
diff --git a/src/modules/module-volume-restore.c b/src/modules/module-volume-restore.c
index d862c203..0fb17a0d 100644
--- a/src/modules/module-volume-restore.c
+++ b/src/modules/module-volume-restore.c
@@ -493,7 +493,7 @@ int pa__init(pa_module*m) {
m->userdata = u;
- if (!(u->table_file = pa_state_path(pa_modargs_get_value(ma, "table", DEFAULT_VOLUME_TABLE_FILE))))
+ if (!(u->table_file = pa_state_path(pa_modargs_get_value(ma, "table", DEFAULT_VOLUME_TABLE_FILE), TRUE)))
goto fail;
if (pa_modargs_get_value_boolean(ma, "restore_device", &restore_device) < 0 ||
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 41bf42d3..d76abe83 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1690,7 +1690,7 @@ char *pa_make_path_absolute(const char *p) {
/* if fn is null return the PulseAudio run time path in s (~/.pulse)
* if fn is non-null and starts with / return fn
* otherwise append fn to the run time path and return it */
-static char *get_path(const char *fn, pa_bool_t rt) {
+static char *get_path(const char *fn, pa_bool_t prependmid, pa_bool_t rt) {
char *rtp;
if (pa_is_path_absolute(fn))
@@ -1703,7 +1703,20 @@ static char *get_path(const char *fn, pa_bool_t rt) {
if (fn) {
char *r;
- r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s", rtp, fn);
+
+ if (prependmid) {
+ char *mid;
+
+ if (!(mid = pa_machine_id())) {
+ pa_xfree(rtp);
+ return NULL;
+ }
+
+ r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s:%s", rtp, mid, fn);
+ pa_xfree(mid);
+ } else
+ r = pa_sprintf_malloc("%s" PA_PATH_SEP "%s", rtp, fn);
+
pa_xfree(rtp);
return r;
} else
@@ -1711,11 +1724,11 @@ static char *get_path(const char *fn, pa_bool_t rt) {
}
char *pa_runtime_path(const char *fn) {
- return get_path(fn, 1);
+ return get_path(fn, FALSE, TRUE);
}
-char *pa_state_path(const char *fn) {
- return get_path(fn, 0);
+char *pa_state_path(const char *fn, pa_bool_t appendmid) {
+ return get_path(fn, appendmid, FALSE);
}
/* Convert the string s to a signed integer in *ret_i */
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index b0c07588..838e4ad3 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -121,7 +121,7 @@ char* pa_find_config_file(const char *global, const char *local, const char *env
char *pa_get_runtime_dir(void);
char *pa_get_state_dir(void);
char *pa_runtime_path(const char *fn);
-char *pa_state_path(const char *fn);
+char *pa_state_path(const char *fn, pa_bool_t prepend_machine_id);
int pa_atoi(const char *s, int32_t *ret_i);
int pa_atou(const char *s, uint32_t *ret_u);