]> code.delx.au - pulseaudio/blobdiff - src/daemon/main.c
Make the shared memory segment size configurable
[pulseaudio] / src / daemon / main.c
index 9cdcb6cd722cbeda508ac610433a61cd0431a870..53f5d1938292233f0fe71a154162fd16641f3f78 100644 (file)
@@ -66,6 +66,7 @@
 #include <pulse/xmalloc.h>
 #include <pulse/i18n.h>
 
+#include <pulsecore/lock-autospawn.h>
 #include <pulsecore/winsock.h>
 #include <pulsecore/core-error.h>
 #include <pulsecore/core.h>
@@ -95,8 +96,6 @@
 #include "ltdl-bind-now.h"
 #include "polkit.h"
 
-#define AUTOSPAWN_LOCK "autospawn.lock"
-
 #ifdef HAVE_LIBWRAP
 /* Only one instance of these variables */
 int allow_severity = LOG_INFO;
@@ -112,7 +111,7 @@ int __padsp_disabled__ = 7;
 
 #ifdef OS_IS_WIN32
 
-static void message_cb(pa_mainloop_api*a, pa_time_event*e, PA_GCC_UNUSED const struct timeval *tv, void *userdata) {
+static void message_cb(pa_mainloop_api*a, pa_time_event*e, const struct timeval *tv, void *userdata) {
     MSG msg;
     struct timeval tvnext;
 
@@ -131,7 +130,7 @@ static void message_cb(pa_mainloop_api*a, pa_time_event*e, PA_GCC_UNUSED const s
 
 #endif
 
-static void signal_callback(pa_mainloop_api*m, PA_GCC_UNUSED pa_signal_event *e, int sig, void *userdata) {
+static void signal_callback(pa_mainloop_api*m, pa_signal_event *e, int sig, void *userdata) {
     pa_log_info(_("Got signal %s."), pa_sig2str(sig));
 
     switch (sig) {
@@ -346,7 +345,11 @@ int main(int argc, char *argv[]) {
     struct timeval win32_tv;
 #endif
     char *lf = NULL;
-    int autospawn_lock_fd = -1;
+    int autospawn_fd = -1;
+    pa_bool_t autospawn_locked = FALSE;
+
+    pa_log_set_maximal_level(PA_LOG_INFO);
+    pa_log_set_ident("pulseaudio");
 
 #if defined(__linux__) && defined(__OPTIMIZE__)
     /*
@@ -410,9 +413,6 @@ int main(int argc, char *argv[]) {
     setlocale(LC_ALL, "");
     pa_init_i18n();
 
-    pa_log_set_maximal_level(PA_LOG_INFO);
-    pa_log_set_ident("pulseaudio");
-
     conf = pa_daemon_conf_new();
 
     if (pa_daemon_conf_load(conf, NULL) < 0)
@@ -656,8 +656,17 @@ int main(int argc, char *argv[]) {
          * first take the autospawn lock to make things
          * synchronous. */
 
-        lf = pa_runtime_path(AUTOSPAWN_LOCK);
-        autospawn_lock_fd = pa_lock_lockfile(lf);
+        if ((autospawn_fd = pa_autospawn_lock_init()) < 0) {
+            pa_log("Failed to initialize autospawn lock");
+            goto finish;
+        }
+
+        if ((pa_autospawn_lock_acquire(TRUE) < 0)) {
+            pa_log("Failed to acquire autospawn lock");
+            goto finish;
+        }
+
+        autospawn_locked = TRUE;
     }
 
     if (conf->daemonize) {
@@ -703,12 +712,15 @@ int main(int argc, char *argv[]) {
             goto finish;
         }
 
-        if (autospawn_lock_fd >= 0) {
+        if (autospawn_fd >= 0) {
             /* The lock file is unlocked from the parent, so we need
              * to close it in the child */
 
-            pa_close(autospawn_lock_fd);
-            autospawn_lock_fd = -1;
+            pa_autospawn_lock_release();
+            pa_autospawn_lock_done(TRUE);
+
+            autospawn_locked = FALSE;
+            autospawn_fd = -1;
         }
 
         pa_assert_se(pa_close(daemon_pipe[0]) == 0);
@@ -766,8 +778,27 @@ int main(int argc, char *argv[]) {
     pa_set_env("PULSE_SYSTEM", conf->system_instance ? "1" : "0");
 
     pa_log_info(_("This is PulseAudio %s"), PACKAGE_VERSION);
+    pa_log_debug(_("Compilation host: %s"), CANONICAL_HOST);
+    pa_log_debug(_("Compilation CFLAGS: %s"), PA_CFLAGS);
+
+    s = pa_uname_string();
+    pa_log_debug(_("Running on host: %s"), s);
+    pa_xfree(s);
+
     pa_log_info(_("Page size is %lu bytes"), (unsigned long) PA_PAGE_SIZE);
 
+#ifdef HAVE_VALGRIND_MEMCHECK_H
+    pa_log_debug(_("Compiled with Valgrind support: yes"));
+#else
+    pa_log_debug(_("Compiled with Valgrind support: no"));
+#endif
+
+#ifdef __OPTIMIZE__
+    pa_log_debug(_("Optimized build: yes"));
+#else
+    pa_log_debug(_("Optimized build: no"));
+#endif
+
     if (!(s = pa_machine_id())) {
         pa_log(_("Failed to get machine ID"));
         goto finish;
@@ -823,7 +854,7 @@ int main(int argc, char *argv[]) {
 
     pa_assert_se(mainloop = pa_mainloop_new());
 
-    if (!(c = pa_core_new(pa_mainloop_get_api(mainloop), !conf->disable_shm))) {
+    if (!(c = pa_core_new(pa_mainloop_get_api(mainloop), !conf->disable_shm, conf->shm_size))) {
         pa_log(_("pa_core_new() failed."));
         goto finish;
     }
@@ -838,6 +869,7 @@ int main(int argc, char *argv[]) {
     c->realtime_priority = conf->realtime_priority;
     c->realtime_scheduling = !!conf->realtime_scheduling;
     c->disable_remixing = !!conf->disable_remixing;
+    c->disable_lfe_remixing = !!conf->disable_lfe_remixing;
     c->running_as_daemon = !!conf->daemonize;
     c->disallow_exit = conf->disallow_exit;
 
@@ -917,8 +949,12 @@ int main(int argc, char *argv[]) {
 
 finish:
 
-    if (autospawn_lock_fd >= 0)
-        pa_unlock_lockfile(lf, autospawn_lock_fd);
+    if (autospawn_fd >= 0) {
+        if (autospawn_locked)
+            pa_autospawn_lock_release();
+
+        pa_autospawn_lock_done(FALSE);
+    }
 
     if (lf)
         pa_xfree(lf);