From: Rémi Bernon rbernon@codeweavers.com
For when wineserver is started separately from any wine process, where it doesn't inherit the limits otherwise requested from __wine_main. --- server/main.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/server/main.c b/server/main.c index e014ec535ff..01bec224c70 100644 --- a/server/main.c +++ b/server/main.c @@ -28,6 +28,12 @@ #include <stdlib.h> #include <sys/time.h> #include <unistd.h> +#ifdef HAVE_SYS_RESOURCE_H +# include <sys/resource.h> +#endif +#ifdef HAVE_SYS_SYSCTL_H +# include <sys/sysctl.h> +#endif
#include "object.h" #include "file.h" @@ -212,6 +218,17 @@ static void sigterm_handler( int signum ) exit(1); /* make sure atexit functions get called */ }
+static void set_max_limit( int limit ) +{ + struct rlimit rlimit; + + if (!getrlimit( limit, &rlimit )) + { + rlimit.rlim_cur = rlimit.rlim_max; + if (!setrlimit( limit, &rlimit )) return; + } +} + int main( int argc, char *argv[] ) { setvbuf( stderr, NULL, _IOLBF, 0 ); @@ -225,6 +242,9 @@ int main( int argc, char *argv[] ) signal( SIGQUIT, sigterm_handler ); signal( SIGTERM, sigterm_handler ); signal( SIGABRT, sigterm_handler ); +#ifdef RLIMIT_NICE + set_max_limit( RLIMIT_NICE ); +#endif
sock_init(); open_master_socket();