X-Git-Url: https://code.delx.au/pulseaudio/blobdiff_plain/6b9056c61a174cd8fa085f85afa60f4e4ef3b5ed..9b74afcfa3fd3a870aa485fe7f70b5751bfb5158:/src/daemon/main.c diff --git a/src/daemon/main.c b/src/daemon/main.c index 9c419efc..0675f196 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -298,11 +298,15 @@ static void set_all_rlimits(const pa_daemon_conf *conf) { #ifdef RLIMIT_NPROC set_one_rlimit(&conf->rlimit_nproc, RLIMIT_NPROC, "RLIMIT_NPROC"); #endif +#ifdef RLIMIT_NOFILE set_one_rlimit(&conf->rlimit_nofile, RLIMIT_NOFILE, "RLIMIT_NOFILE"); +#endif #ifdef RLIMIT_MEMLOCK set_one_rlimit(&conf->rlimit_memlock, RLIMIT_MEMLOCK, "RLIMIT_MEMLOCK"); #endif +#ifdef RLIMIT_AS set_one_rlimit(&conf->rlimit_as, RLIMIT_AS, "RLIMIT_AS"); +#endif #ifdef RLIMIT_LOCKS set_one_rlimit(&conf->rlimit_locks, RLIMIT_LOCKS, "RLIMIT_LOCKS"); #endif @@ -344,7 +348,6 @@ int main(int argc, char *argv[]) { pa_time_event *win32_timer; struct timeval win32_tv; #endif - char *lf = NULL; int autospawn_fd = -1; pa_bool_t autospawn_locked = FALSE; @@ -365,8 +368,11 @@ int main(int argc, char *argv[]) { * value of $LD_BIND_NOW on initialization. */ pa_set_env("LD_BIND_NOW", "1"); - pa_assert_se(rp = pa_readlink("/proc/self/exe")); - pa_assert_se(execv(rp, argv) == 0); + + if ((rp = pa_readlink("/proc/self/exe"))) + pa_assert_se(execv(rp, argv) == 0); + else + pa_log_warn("Couldn't read /proc/self/exe, cannot self execute. Running in a chroot()?"); } #endif @@ -500,8 +506,9 @@ int main(int argc, char *argv[]) { if ((conf->high_priority && !allow_high_priority) || (conf->realtime_scheduling && !allow_realtime)) pa_log_notice(_("Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n" - "We are not in group '"PA_REALTIME_GROUP"', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n" - "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '"PA_REALTIME_GROUP"', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user.")); + "We are not in group '%s', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n" + "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '%s', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."), + PA_REALTIME_GROUP, PA_REALTIME_GROUP); if (!allow_realtime) @@ -821,6 +828,8 @@ int main(int argc, char *argv[]) { pa_log_debug(_("Running on host: %s"), s); pa_xfree(s); + pa_log_debug(_("Found %u CPUs."), pa_ncpus()); + pa_log_info(_("Page size is %lu bytes"), (unsigned long) PA_PAGE_SIZE); #ifdef HAVE_VALGRIND_MEMCHECK_H @@ -885,6 +894,8 @@ int main(int argc, char *argv[]) { else pa_log_info(_("Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!")); + pa_rtclock_hrtimer_enable(); + #ifdef SIGRTMIN /* Valgrind uses SIGRTMAX. To easy debugging we don't use it here */ pa_rtsig_configure(SIGRTMIN, SIGRTMAX-1); @@ -898,10 +909,10 @@ int main(int argc, char *argv[]) { } c->default_sample_spec = conf->default_sample_spec; + c->default_channel_map = conf->default_channel_map; c->default_n_fragments = conf->default_n_fragments; c->default_fragment_size_msec = conf->default_fragment_size_msec; c->exit_idle_time = conf->exit_idle_time; - c->module_idle_time = conf->module_idle_time; c->scache_idle_time = conf->scache_idle_time; c->resample_method = conf->resample_method; c->realtime_priority = conf->realtime_priority; @@ -910,6 +921,7 @@ int main(int argc, char *argv[]) { c->disable_lfe_remixing = !!conf->disable_lfe_remixing; c->running_as_daemon = !!conf->daemonize; c->disallow_exit = conf->disallow_exit; + c->flat_volumes = conf->flat_volumes; pa_assert_se(pa_signal_init(pa_mainloop_get_api(mainloop)) == 0); pa_signal_new(SIGINT, signal_callback, c); @@ -963,11 +975,6 @@ int main(int argc, char *argv[]) { goto finish; } - if (c->default_sink_name && !pa_namereg_get(c, c->default_sink_name, PA_NAMEREG_SINK, TRUE) && conf->fail) { - pa_log_error(_("Default sink name (%s) does not exist in name register."), c->default_sink_name); - goto finish; - } - #ifdef HAVE_FORK if (daemon_pipe[1] >= 0) { int ok = 0; @@ -994,9 +1001,6 @@ finish: pa_autospawn_lock_done(FALSE); } - if (lf) - pa_xfree(lf); - #ifdef OS_IS_WIN32 if (win32_timer) pa_mainloop_get_api(mainloop)->time_free(win32_timer);