--- rxvt-unicode/src/rxvtd.C 2008/06/15 13:54:15 1.46 +++ rxvt-unicode/src/rxvtd.C 2010/10/24 17:52:50 1.52 @@ -33,6 +33,14 @@ #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" @@ -216,12 +224,15 @@ return err (); } -int opt_fork, opt_opendisplay, opt_quiet; - int main (int argc, const char *const *argv) { - rxvt_init (); + ptytty::init (); + + int opt_fork, opt_opendisplay, opt_quiet; +#if ENABLE_MLOCK + int opt_lock; +#endif for (int i = 1; i < argc; i++) { @@ -231,6 +242,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 +253,8 @@ } } + rxvt_init (); + // optionally open display and never release it. if (opt_opendisplay) if (const char *dpy = getenv ("DISPLAY")) @@ -256,10 +273,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 +296,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; }