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

Diff for /src/usr.bin/tmux/server.c between version 1.41 and 1.42

version 1.41, 2009/09/23 06:18:47 version 1.42, 2009/09/23 08:21:57
Line 49 
Line 49 
 int              server_create_socket(void);  int              server_create_socket(void);
 int              server_main(int);  int              server_main(int);
 void             server_shutdown(void);  void             server_shutdown(void);
   int              server_should_shutdown(void);
 void             server_child_signal(void);  void             server_child_signal(void);
 void             server_fill_windows(struct pollfd **);  void             server_fill_windows(struct pollfd **);
 void             server_handle_windows(struct pollfd **);  void             server_handle_windows(struct pollfd **);
Line 244 
Line 245 
         struct window   *w;          struct window   *w;
         struct pollfd   *pfds, *pfd;          struct pollfd   *pfds, *pfd;
         int              nfds, xtimeout;          int              nfds, xtimeout;
         u_int            i, n;          u_int            i;
         time_t           now, last;          time_t           now, last;
   
         siginit();          siginit();
Line 258 
Line 259 
                 if (sigterm)                  if (sigterm)
                         server_shutdown();                          server_shutdown();
   
                   /* Stop if no sessions or clients left. */
                   if (server_should_shutdown())
                           break;
   
                 /* Handle child exit. */                  /* Handle child exit. */
                 if (sigchld) {                  if (sigchld) {
                         server_child_signal();                          server_child_signal();
Line 337 
Line 342 
   
                 /* Collect dead clients and sessions. */                  /* Collect dead clients and sessions. */
                 server_clean_dead();                  server_clean_dead();
   
                 /*  
                  * If we have no sessions and clients left, let's get out  
                  * of here...  
                  */  
                 n = 0;  
                 for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {  
                         if (ARRAY_ITEM(&sessions, i) != NULL)  
                                 n++;  
                 }  
                 for (i = 0; i < ARRAY_LENGTH(&clients); i++) {  
                         if (ARRAY_ITEM(&clients, i) != NULL)  
                                 n++;  
                 }  
                 if (n == 0)  
                         break;  
         }          }
         if (pfds != NULL)          if (pfds != NULL)
                 xfree(pfds);                  xfree(pfds);
Line 391 
Line 380 
         struct client   *c;          struct client   *c;
         u_int            i, j;          u_int            i, j;
   
           for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
                   c = ARRAY_ITEM(&clients, i);
                   if (c != NULL) {
                           if (c->flags & (CLIENT_BAD|CLIENT_SUSPENDED))
                                   server_lost_client(c);
                           else
                                   server_write_client(c, MSG_SHUTDOWN, NULL, 0);
                   }
           }
   
         for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {          for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
                 s = ARRAY_ITEM(&sessions, i);                  s = ARRAY_ITEM(&sessions, i);
                 for (j = 0; j < ARRAY_LENGTH(&clients); j++) {                  for (j = 0; j < ARRAY_LENGTH(&clients); j++) {
Line 403 
Line 402 
                 if (s != NULL)                  if (s != NULL)
                         session_destroy(s);                          session_destroy(s);
         }          }
   }
   
   /* Check if the server should be shutting down (no more clients or windows). */
   int
   server_should_shutdown(void)
   {
           u_int   i;
   
           for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
                   if (ARRAY_ITEM(&sessions, i) != NULL)
                           return (0);
           }
         for (i = 0; i < ARRAY_LENGTH(&clients); i++) {          for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
                 c = ARRAY_ITEM(&clients, i);                  if (ARRAY_ITEM(&clients, i) != NULL)
                 if (c != NULL) {                          return (0);
                         if (c->flags & CLIENT_BAD)  
                                 server_lost_client(c);  
                         else  
                                 server_write_client(c, MSG_SHUTDOWN, NULL, 0);  
                 }  
         }          }
           return (1);
 }  }
   
 /* Handle SIGCHLD. */  /* Handle SIGCHLD. */

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.42