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

Diff for /src/usr.bin/tmux/server-fn.c between version 1.133 and 1.134

version 1.133, 2022/03/08 18:31:46 version 1.134, 2023/09/01 13:48:54
Line 29 
Line 29 
   
 #include "tmux.h"  #include "tmux.h"
   
 static struct session   *server_next_session(struct session *);  static void     server_destroy_session_group(struct session *);
 static void              server_destroy_session_group(struct session *);  
   
 void  void
 server_redraw_client(struct client *c)  server_redraw_client(struct client *c)
Line 209 
Line 208 
                         if (session_detach(s, wl)) {                          if (session_detach(s, wl)) {
                                 server_destroy_session_group(s);                                  server_destroy_session_group(s);
                                 break;                                  break;
                         } else                          }
                                 server_redraw_session_group(s);                          server_redraw_session_group(s);
                 }                  }
   
                 if (renumber)                  if (renumber)
Line 384 
Line 383 
         struct session_group    *sg;          struct session_group    *sg;
         struct session          *s1;          struct session          *s1;
   
         if ((sg = session_group_contains(s)) == NULL)          if ((sg = session_group_contains(s)) == NULL) {
                 server_destroy_session(s);                  server_destroy_session(s);
         else {                  session_destroy(s, 1, __func__);
           } else {
                 TAILQ_FOREACH_SAFE(s, &sg->sessions, gentry, s1) {                  TAILQ_FOREACH_SAFE(s, &sg->sessions, gentry, s1) {
                         server_destroy_session(s);                          server_destroy_session(s);
                         session_destroy(s, 1, __func__);                          session_destroy(s, 1, __func__);
Line 395 
Line 395 
 }  }
   
 static struct session *  static struct session *
 server_next_session(struct session *s)  server_find_session(struct session *s,
       int (*f)(struct session *, struct session *))
 {  {
         struct session *s_loop, *s_out = NULL;          struct session *s_loop, *s_out = NULL;
   
         RB_FOREACH(s_loop, sessions, &sessions) {          RB_FOREACH(s_loop, sessions, &sessions) {
                 if (s_loop == s)                  if (s_loop != s && (s_out == NULL || f(s_loop, s_out)))
                         continue;  
                 if (s_out == NULL ||  
                     timercmp(&s_loop->activity_time, &s_out->activity_time, <))  
                         s_out = s_loop;                          s_out = s_loop;
         }          }
         return (s_out);          return (s_out);
 }  }
   
 static struct session *  static int
 server_next_detached_session(struct session *s)  server_newer_session(struct session *s_loop, struct session *s_out)
 {  {
         struct session *s_loop, *s_out = NULL;          return (timercmp(&s_loop->activity_time, &s_out->activity_time, <));
   }
   
         RB_FOREACH(s_loop, sessions, &sessions) {  static int
                 if (s_loop == s || s_loop->attached)  server_newer_detached_session(struct session *s_loop, struct session *s_out)
                         continue;  {
                 if (s_out == NULL ||          if (s_loop->attached)
                     timercmp(&s_loop->activity_time, &s_out->activity_time, <))                  return (0);
                         s_out = s_loop;          return (server_newer_session(s_loop, s_out));
         }  
         return (s_out);  
 }  }
   
 void  void
 server_destroy_session(struct session *s)  server_destroy_session(struct session *s)
 {  {
         struct client   *c;          struct client   *c;
         struct session  *s_new;          struct session  *s_new = NULL;
         int              detach_on_destroy;          int              detach_on_destroy;
   
         detach_on_destroy = options_get_number(s->options, "detach-on-destroy");          detach_on_destroy = options_get_number(s->options, "detach-on-destroy");
         if (detach_on_destroy == 0)          if (detach_on_destroy == 0)
                 s_new = server_next_session(s);                  s_new = server_find_session(s, server_newer_session);
         else if (detach_on_destroy == 2)          else if (detach_on_destroy == 2)
                 s_new = server_next_detached_session(s);                  s_new = server_find_session(s, server_newer_detached_session);
         else          else if (detach_on_destroy == 3)
                   s_new = session_previous_session(s);
           else if (detach_on_destroy == 4)
                   s_new = session_next_session(s);
           if (s_new == s)
                 s_new = NULL;                  s_new = NULL;
         TAILQ_FOREACH(c, &clients, entry) {          TAILQ_FOREACH(c, &clients, entry) {
                 if (c->session != s)                  if (c->session != s)
                         continue;                          continue;
                   c->session = NULL;
                   c->last_session = NULL;
                 server_client_set_session(c, s_new);                  server_client_set_session(c, s_new);
                 if (s_new == NULL)                  if (s_new == NULL)
                         c->flags |= CLIENT_EXIT;                          c->flags |= CLIENT_EXIT;

Legend:
Removed from v.1.133  
changed lines
  Added in v.1.134