--- rxvt-unicode/src/rxvtd.C 2008/06/15 13:54:15 1.46 +++ rxvt-unicode/src/rxvtd.C 2012/01/19 13:33:43 1.59 @@ -3,7 +3,7 @@ *----------------------------------------------------------------------* * * All portions of code are copyright by their respective author/s. - * Copyright (c) 2003-2007 Marc Lehmann + * Copyright (c) 2003-2007 Marc Lehmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,10 +21,10 @@ *----------------------------------------------------------------------*/ #include "../config.h" -#include -#include -#include -#include +#include +#include +#include +#include #include #include @@ -33,7 +33,15 @@ #include #include -#include +#if defined(ENABLE_FRILLS) && defined(_POSIX_MEMLOCK) && _POSIX_MEMLOCK > 0 +# define ENABLE_MLOCK 1 +#endif + +#if ENABLE_MLOCK +# include +#endif + +#include #include "rxvt.h" #include "rxvtdaemon.h" @@ -94,7 +102,7 @@ sa.sun_family = AF_UNIX; strcpy (sa.sun_path, sockname); - unlink (rxvt_connection::unix_sockname ()); + unlink (sockname); mode_t omask = umask (0077); @@ -180,8 +188,6 @@ return err ("protocol error: unexpected NEW token.\n"); } - envv->push_back (0); - { rxvt_term *term = new rxvt_term; @@ -216,12 +222,15 @@ return err (); } -int opt_fork, opt_opendisplay, opt_quiet; - int -main (int argc, const char *const *argv) +main (int argc, char *argv[]) { - rxvt_init (); + ptytty::init (); + + static char opt_fork, opt_opendisplay, opt_quiet; +#if ENABLE_MLOCK + static char opt_lock; +#endif for (int i = 1; i < argc; i++) { @@ -231,6 +240,10 @@ opt_opendisplay = 1; else if (!strcmp (argv [i], "-q") || !strcmp (argv [i], "--quiet")) opt_quiet = 1; +#if ENABLE_MLOCK + else if (!strcmp (argv [i], "-m") || !strcmp (argv [i], "--mlock")) + opt_lock = 1; +#endif else { rxvt_log ("%s: unknown option '%s', aborting.\n", argv [0], argv [i]); @@ -238,6 +251,8 @@ } } + rxvt_init (); + // optionally open display and never release it. if (opt_opendisplay) if (const char *dpy = getenv ("DISPLAY")) @@ -256,10 +271,21 @@ free (sockname); + pid_t pid = 0; if (opt_fork) { - pid_t pid = fork (); + pid = fork (); + } + +#if ENABLE_MLOCK + // Optionally perform an mlockall so this process does not get swapped out. + if (opt_lock && !pid) + if (mlockall (MCL_CURRENT | MCL_FUTURE) < 0) + perror ("unable to lock into ram"); +#endif + if (opt_fork) + { if (pid < 0) { rxvt_log ("unable to fork daemon, aborting.\n"); @@ -268,10 +294,10 @@ else if (pid > 0) _exit (EXIT_SUCCESS); - ev_default_fork (); + ev_loop_fork (EV_DEFAULT_UC); } - ev_loop (0); + ev_run (); return EXIT_SUCCESS; }