summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2013-10-10 11:46:28 +0000
committernicm <nicm>2013-10-10 11:46:28 +0000
commitd3830e622f94f0826e2169eca1f920abc234a412 (patch)
tree6e88f85934e52b9e0f86504707b815ed861edb01
parent0538676aa38914097fcf1a8eb292eac8852434aa (diff)
Grouped sessions were being leaked on destroy, correctly free them.
-rw-r--r--server-fn.c7
-rw-r--r--session.c1
2 files changed, 5 insertions, 3 deletions
diff --git a/server-fn.c b/server-fn.c
index efb95acd..fb0eadd6 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -398,14 +398,15 @@ void
server_destroy_session_group(struct session *s)
{
struct session_group *sg;
+ struct session *s1;
if ((sg = session_group_find(s)) == NULL)
server_destroy_session(s);
else {
- TAILQ_FOREACH(s, &sg->sessions, gentry)
+ TAILQ_FOREACH_SAFE(s, &sg->sessions, gentry, s1) {
server_destroy_session(s);
- TAILQ_REMOVE(&session_groups, sg, entry);
- free(sg);
+ session_destroy(s);
+ }
}
}
diff --git a/session.c b/session.c
index c7b54a2b..7e144886 100644
--- a/session.c
+++ b/session.c
@@ -151,6 +151,7 @@ void
session_destroy(struct session *s)
{
struct winlink *wl;
+
log_debug("session %s destroyed", s->name);
RB_REMOVE(sessions, &sessions, s);