mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-11 14:43:34 +02:00
Merge branch 'obsd-master'
Conflicts: client.c tmux.1 tmux.c
This commit is contained in:
31
session.c
31
session.c
@ -26,12 +26,12 @@
|
||||
|
||||
#include "tmux.h"
|
||||
|
||||
/* Global session list. */
|
||||
struct sessions sessions;
|
||||
struct sessions dead_sessions;
|
||||
u_int next_session_id;
|
||||
struct session_groups session_groups;
|
||||
|
||||
void session_free(int, short, void *);
|
||||
|
||||
struct winlink *session_next_alert(struct winlink *);
|
||||
struct winlink *session_previous_alert(struct winlink *);
|
||||
|
||||
@ -108,7 +108,7 @@ session_create(const char *name, int argc, char **argv, const char *path,
|
||||
struct winlink *wl;
|
||||
|
||||
s = xmalloc(sizeof *s);
|
||||
s->references = 0;
|
||||
s->references = 1;
|
||||
s->flags = 0;
|
||||
|
||||
if (gettimeofday(&s->creation_time, NULL) != 0)
|
||||
@ -163,6 +163,29 @@ session_create(const char *name, int argc, char **argv, const char *path,
|
||||
return (s);
|
||||
}
|
||||
|
||||
/* Remove a reference from a session. */
|
||||
void
|
||||
session_unref(struct session *s)
|
||||
{
|
||||
log_debug("session %s has %d references", s->name, s->references);
|
||||
|
||||
s->references--;
|
||||
if (s->references == 0)
|
||||
event_once(-1, EV_TIMEOUT, session_free, s, NULL);
|
||||
}
|
||||
|
||||
/* Free session. */
|
||||
void
|
||||
session_free(unused int fd, unused short events, void *arg)
|
||||
{
|
||||
struct session *s = arg;
|
||||
|
||||
log_debug("sesson %s freed (%d references)", s->name, s->references);
|
||||
|
||||
if (s->references == 0)
|
||||
free(s);
|
||||
}
|
||||
|
||||
/* Destroy a session. */
|
||||
void
|
||||
session_destroy(struct session *s)
|
||||
@ -190,7 +213,7 @@ session_destroy(struct session *s)
|
||||
|
||||
close(s->cwd);
|
||||
|
||||
RB_INSERT(sessions, &dead_sessions, s);
|
||||
session_unref(s);
|
||||
}
|
||||
|
||||
/* Check a session name is valid: not empty and no colons or periods. */
|
||||
|
Reference in New Issue
Block a user