[BACK]Return to proc.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/proc.c between version 1.11 and 1.12

version 1.11, 2017/07/12 09:07:52 version 1.12, 2017/07/12 09:24:17
Line 24 
Line 24 
 #include <errno.h>  #include <errno.h>
 #include <event.h>  #include <event.h>
 #include <imsg.h>  #include <imsg.h>
   #include <signal.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
 #include <unistd.h>  #include <unistd.h>
Line 35 
Line 36 
         int               exit;          int               exit;
   
         void            (*signalcb)(int);          void            (*signalcb)(int);
   
           struct event      ev_sighup;
           struct event      ev_sigchld;
           struct event      ev_sigcont;
           struct event      ev_sigterm;
           struct event      ev_sigusr1;
           struct event      ev_sigusr2;
           struct event      ev_sigwinch;
 };  };
   
 struct tmuxpeer {  struct tmuxpeer {
Line 162 
Line 171 
 }  }
   
 struct tmuxproc *  struct tmuxproc *
 proc_start(const char *name, struct event_base *base, int forkflag,  proc_start(const char *name)
     void (*signalcb)(int))  
 {  {
         struct tmuxproc *tp;          struct tmuxproc *tp;
         struct utsname   u;          struct utsname   u;
   
         if (forkflag) {  
                 switch (fork()) {  
                 case -1:  
                         fatal("fork failed");  
                 case 0:  
                         break;  
                 default:  
                         return (NULL);  
                 }  
                 if (daemon(1, 0) != 0)  
                         fatal("daemon failed");  
   
                 clear_signals(0);  
                 if (event_reinit(base) != 0)  
                         fatalx("event_reinit failed");  
         }  
   
         log_open(name);          log_open(name);
         setproctitle("%s (%s)", name, socket_path);          setproctitle("%s (%s)", name, socket_path);
   
Line 199 
Line 190 
         tp = xcalloc(1, sizeof *tp);          tp = xcalloc(1, sizeof *tp);
         tp->name = xstrdup(name);          tp->name = xstrdup(name);
   
         tp->signalcb = signalcb;  
         set_signals(proc_signal_cb, tp);  
   
         return (tp);          return (tp);
 }  }
   
Line 219 
Line 207 
 proc_exit(struct tmuxproc *tp)  proc_exit(struct tmuxproc *tp)
 {  {
         tp->exit = 1;          tp->exit = 1;
   }
   
   void
   proc_set_signals(struct tmuxproc *tp, void (*signalcb)(int))
   {
           struct sigaction        sa;
   
           tp->signalcb = signalcb;
   
           memset(&sa, 0, sizeof sa);
           sigemptyset(&sa.sa_mask);
           sa.sa_flags = SA_RESTART;
           sa.sa_handler = SIG_IGN;
   
           sigaction(SIGINT, &sa, NULL);
           sigaction(SIGPIPE, &sa, NULL);
           sigaction(SIGUSR2, &sa, NULL);
           sigaction(SIGTSTP, &sa, NULL);
   
           signal_set(&tp->ev_sighup, SIGHUP, proc_signal_cb, tp);
           signal_add(&tp->ev_sighup, NULL);
           signal_set(&tp->ev_sigchld, SIGCHLD, proc_signal_cb, tp);
           signal_add(&tp->ev_sigchld, NULL);
           signal_set(&tp->ev_sigcont, SIGCONT, proc_signal_cb, tp);
           signal_add(&tp->ev_sigcont, NULL);
           signal_set(&tp->ev_sigterm, SIGTERM, proc_signal_cb, tp);
           signal_add(&tp->ev_sigterm, NULL);
           signal_set(&tp->ev_sigusr1, SIGUSR1, proc_signal_cb, tp);
           signal_add(&tp->ev_sigusr1, NULL);
           signal_set(&tp->ev_sigusr2, SIGUSR2, proc_signal_cb, tp);
           signal_add(&tp->ev_sigusr2, NULL);
           signal_set(&tp->ev_sigwinch, SIGWINCH, proc_signal_cb, tp);
           signal_add(&tp->ev_sigwinch, NULL);
   }
   
   void
   proc_clear_signals(struct tmuxproc *tp)
   {
           struct sigaction        sa;
   
           memset(&sa, 0, sizeof sa);
           sigemptyset(&sa.sa_mask);
           sa.sa_flags = SA_RESTART;
           sa.sa_handler = SIG_DFL;
   
           sigaction(SIGINT, &sa, NULL);
           sigaction(SIGPIPE, &sa, NULL);
           sigaction(SIGUSR2, &sa, NULL);
           sigaction(SIGTSTP, &sa, NULL);
   
           event_del(&tp->ev_sighup);
           event_del(&tp->ev_sigchld);
           event_del(&tp->ev_sigcont);
           event_del(&tp->ev_sigterm);
           event_del(&tp->ev_sigusr1);
           event_del(&tp->ev_sigusr2);
           event_del(&tp->ev_sigwinch);
 }  }
   
 struct tmuxpeer *  struct tmuxpeer *

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12