version 1.6, 2009/09/01 13:09:49 |
version 1.7, 2009/09/07 21:01:50 |
|
|
|
|
/* Global session list. */ |
/* Global session list. */ |
struct sessions sessions; |
struct sessions sessions; |
|
struct sessions dead_sessions; |
|
|
struct winlink *session_next_activity(struct session *, struct winlink *); |
struct winlink *session_next_activity(struct session *, struct winlink *); |
struct winlink *session_previous_activity(struct session *, struct winlink *); |
struct winlink *session_previous_activity(struct session *, struct winlink *); |
|
|
u_int i; |
u_int i; |
|
|
s = xmalloc(sizeof *s); |
s = xmalloc(sizeof *s); |
|
s->references = 0; |
s->flags = 0; |
s->flags = 0; |
|
|
if (gettimeofday(&s->tv, NULL) != 0) |
if (gettimeofday(&s->tv, NULL) != 0) |
fatal("gettimeofday"); |
fatal("gettimeofday"); |
|
|
s->curw = NULL; |
s->curw = NULL; |
SLIST_INIT(&s->lastw); |
SLIST_INIT(&s->lastw); |
RB_INIT(&s->windows); |
RB_INIT(&s->windows); |
SLIST_INIT(&s->alerts); |
SLIST_INIT(&s->alerts); |
|
|
paste_init_stack(&s->buffers); |
paste_init_stack(&s->buffers); |
|
|
options_init(&s->options, &global_s_options); |
options_init(&s->options, &global_s_options); |
environ_init(&s->environ); |
environ_init(&s->environ); |
if (env != NULL) |
if (env != NULL) |
|
|
winlink_remove(&s->windows, RB_ROOT(&s->windows)); |
winlink_remove(&s->windows, RB_ROOT(&s->windows)); |
|
|
xfree(s->name); |
xfree(s->name); |
xfree(s); |
|
|
for (i = 0; i < ARRAY_LENGTH(&dead_sessions); i++) { |
|
if (ARRAY_ITEM(&dead_sessions, i) == NULL) { |
|
ARRAY_SET(&dead_sessions, i, s); |
|
break; |
|
} |
|
} |
|
if (i == ARRAY_LENGTH(&dead_sessions)) |
|
ARRAY_ADD(&dead_sessions, s); |
|
s->flags |= SESSION_DEAD; |
} |
} |
|
|
/* Find session index. */ |
/* Find session index. */ |