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

Diff for /src/usr.bin/tmux/session.c between version 1.51 and 1.52

version 1.51, 2015/08/28 13:01:03 version 1.52, 2015/08/28 13:12:20
Line 33 
Line 33 
   
 void    session_free(int, short, void *);  void    session_free(int, short, void *);
   
   void    session_lock_timer(int, short, void *);
   
 struct winlink *session_next_alert(struct winlink *);  struct winlink *session_next_alert(struct winlink *);
 struct winlink *session_previous_alert(struct winlink *);  struct winlink *session_previous_alert(struct winlink *);
   
Line 108 
Line 110 
         struct session  *s;          struct session  *s;
         struct winlink  *wl;          struct winlink  *wl;
   
         s = xmalloc(sizeof *s);          s = xcalloc(1, sizeof *s);
         s->references = 1;          s->references = 1;
         s->flags = 0;          s->flags = 0;
   
Line 149 
Line 151 
         }          }
         RB_INSERT(sessions, &sessions, s);          RB_INSERT(sessions, &sessions, s);
   
           if (gettimeofday(&s->creation_time, NULL) != 0)
                   fatal("gettimeofday failed");
           session_update_activity(s, &s->creation_time);
   
         if (argc >= 0) {          if (argc >= 0) {
                 wl = session_new(s, NULL, argc, argv, path, cwd, idx, cause);                  wl = session_new(s, NULL, argc, argv, path, cwd, idx, cause);
                 if (wl == NULL) {                  if (wl == NULL) {
Line 200 
Line 206 
   
         free(s->tio);          free(s->tio);
   
           if (event_initialized(&s->lock_timer))
                   event_del(&s->lock_timer);
   
         session_group_remove(s);          session_group_remove(s);
         environ_free(&s->environ);          environ_free(&s->environ);
         options_free(&s->options);          options_free(&s->options);
Line 224 
Line 233 
         return (*name != '\0' && name[strcspn(name, ":.")] == '\0');          return (*name != '\0' && name[strcspn(name, ":.")] == '\0');
 }  }
   
   /* Lock session if it has timed out. */
   void
   session_lock_timer(unused int fd, unused short events, void *arg)
   {
           struct session  *s = arg;
   
           if (s->flags & SESSION_UNATTACHED)
                   return;
   
           log_debug("session %s locked, activity time %lld", s->name,
               (long long)s->activity_time.tv_sec);
   
           server_lock_session(s);
           recalculate_sizes();
   }
   
 /* Update activity time. */  /* Update activity time. */
 void  void
 session_update_activity(struct session *s, struct timeval *from)  session_update_activity(struct session *s, struct timeval *from)
 {  {
         struct timeval  *last = &s->last_activity_time;          struct timeval  *last = &s->last_activity_time;
           struct timeval   tv;
   
         memcpy(last, &s->activity_time, sizeof *last);          memcpy(last, &s->activity_time, sizeof *last);
         if (from == NULL)          if (from == NULL)
                 gettimeofday(&s->activity_time, NULL);                  gettimeofday(&s->activity_time, NULL);
         else          else
                 memcpy(&s->activity_time, from, sizeof s->activity_time);                  memcpy(&s->activity_time, from, sizeof s->activity_time);
   
           if (evtimer_initialized(&s->lock_timer))
                   evtimer_del(&s->lock_timer);
           else
                   evtimer_set(&s->lock_timer, session_lock_timer, s);
   
           if (~s->flags & SESSION_UNATTACHED) {
                   timerclear(&tv);
                   tv.tv_sec = options_get_number(&s->options, "lock-after-time");
                   if (tv.tv_sec != 0)
                           evtimer_add(&s->lock_timer, &tv);
           }
 }  }
   
 /* Find the next usable session. */  /* Find the next usable session. */

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.52