Does this do it instead?

diff --git a/server-fn.c b/server-fn.c
index 7ef6413..37ef879 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -396,9 +396,9 @@ server_destroy_session_group(struct session *s)
        if ((sg = session_group_find(s)) == NULL)
                server_destroy_session(s);
        else {
+               TAILQ_REMOVE(&session_groups, sg, entry);
                TAILQ_FOREACH(s, &sg->sessions, gentry)
                        server_destroy_session(s);
-               TAILQ_REMOVE(&session_groups, sg, entry);
                free(sg);
        }
 }



On Sat, Jul 27, 2013 at 12:49:12PM +0100, Thomas Adam wrote:
> On Thu, Jul 25, 2013 at 08:25:52PM -0700, Daniel Ralston wrote:
> > Hi all,
> > 
> > I've found a bug.
> > 
> > Repro steps:
> >  1. Run 'tmux' in a terminal.
> > 
> >  2. In another terminal, create a grouped session, by running
> >     'tmux new-session -t <name of first tmux session>'.
> > 
> >  3. Resize the second terminal so it is bigger than the first one.
> > 
> >  4. Kill the program running in the second (larger) terminal; e.g. by
> >     hitting Ctrl-d if running a shell.
> > 
> > Instead of exiting gracefully, the server will segfault.
> > Thanks!
> 
> I appreciate your bug reports, because they're easy for me to reproduce, but
> the next time you submit one, I'd appreciate something like a corefile
> backtrace.
> 
> I should probably really add something to the FAQ about this.
> 
> Your problem was because we were unconditionally calling recalculate() sizes
> from destroying a session, and for a grouped instance, we were then trying
> to access elements from a shared struct which had long since been destroyed.
> 
> Can you try the attached patch?  Again, I don't make use of grouped
> sessions, so I'm looking to ensure I've not regressed anything.
> 
> -- Thomas Adam
> 
> -- 
> "Deep in my heart I wish I was wrong.  But deep in my heart I know I am
> not." -- Morrissey ("Girl Least Likely To" -- off of Viva Hate.)

> diff --git a/server-fn.c b/server-fn.c
> index 86e2054..cb1ab37 100644
> --- a/server-fn.c
> +++ b/server-fn.c
> @@ -450,9 +450,10 @@ server_destroy_session(struct session *s)
>                       notify_attached_session_changed(c);
>                       session_update_activity(s_new);
>                       server_redraw_client(c);
> +
> +                     recalculate_sizes();
>               }
>       }
> -     recalculate_sizes();
>  }
>  
>  void

> ------------------------------------------------------------------------------
> See everything from the browser to the database with AppDynamics
> Get end-to-end visibility with application monitoring from AppDynamics
> Isolate bottlenecks and diagnose root cause in seconds.
> Start your free trial of AppDynamics Pro today!
> http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

> _______________________________________________
> tmux-users mailing list
> tmux-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/tmux-users


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to