After applying your patch, I can't reproduce the crash anymore. Looks like that fixed it. Thanks!
Daniel On Sat, Jul 27, 2013 at 11:45 AM, Nicholas Marriott <nicholas.marri...@gmail.com> wrote: > Try this please. > > The fix is the first part in resize.c to make recalculate_sizes() handle > an empty window with no active pane. This can happen because the window > is in two sessions and isn't destroyed immediately when the pane goes > away but is left until the last session is destroyed. IMO that isn't > ideal but I don't want to change it all right now - there are lots of > interdependencies and things are kind of weird. So, for now we just make > recalculate_sizes() safe. > > We also noticed that it looks like grouped sessions are never actually > freed, so the change in server-fn.c is to hopefully fix that. > > > > diff --git a/resize.c b/resize.c > index 5c365df..8d0bd27 100644 > --- a/resize.c > +++ b/resize.c > @@ -92,7 +92,7 @@ recalculate_sizes(void) > > for (i = 0; i < ARRAY_LENGTH(&windows); i++) { > w = ARRAY_ITEM(&windows, i); > - if (w == NULL) > + if (w == NULL || w->active == NULL) > continue; > flag = options_get_number(&w->options, "aggressive-resize"); > > diff --git a/server-fn.c b/server-fn.c > index 86e2054..738a61d 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 74eb06a..24e2e5e 100644 > --- a/session.c > +++ b/session.c > @@ -150,6 +150,7 @@ void > session_destroy(struct session *s) > { > struct winlink *wl; > + > log_debug("session %s destroyed", s->name); > > RB_REMOVE(sessions, &sessions, s); > > > On Sat, Jul 27, 2013 at 10:24:36AM -0700, Daniel Ralston wrote: >> On Sat, Jul 27, 2013 at 9:55 AM, Nicholas Marriott >> <nicholas.marri...@gmail.com> wrote: >> > I don't think it is right to move recalculate_sizes(), we should do >> > whatever is needed to make it safe to call it there. Do you have a >> > backtrace? >> >> I do indeed, and here it is. >> I also have the full core dump compressed down to 2.5 Mb. If you want >> that too, just ask. >> >> Daniel > >> [New LWP 3339] >> [Thread debugging using libthread_db enabled] >> Using host libthread_db library "/lib64/libthread_db.so.1". >> Core was generated by `./tmux'. >> Program terminated with signal 11, Segmentation fault. >> #0 0x00000000004292a6 in layout_resize_check (lc=0x0, >> type=LAYOUT_LEFTRIGHT) at layout.c:249 >> 249 if (lc->type == LAYOUT_WINDOWPANE) { >> #0 0x00000000004292a6 in layout_resize_check (lc=0x0, >> type=LAYOUT_LEFTRIGHT) at layout.c:249 >> lcchild = 0x20b6a70 >> available = 0 >> minimum = 9 >> #1 0x00000000004297b6 in layout_resize (w=0x20e3c10, sx=159, sy=39) at >> layout.c:415 >> lc = 0x0 >> xlimit = 0 >> ylimit = 34487552 >> xchange = 79 >> ychange = 34310256 >> #2 0x000000000042ec88 in recalculate_sizes () at resize.c:132 >> s = 0x0 >> c = 0x20e57f0 >> w = 0x20e3c10 >> wp = 0x691458 <dead_sessions> >> i = 0 >> j = 2 >> ssx = 159 >> ssy = 39 >> has = 1 >> limit = 0 >> flag = 1 >> has_status = 1 >> is_zoomed = 0 >> #3 0x00000000004368a4 in server_destroy_session (s=0x20e1270) at >> server-fn.c:455 >> c = 0x20e57f0 >> s_new = 0x0 >> i = 2 >> #4 0x0000000000436672 in server_destroy_session_group (s=0x20e1270) at >> server-fn.c:403 >> sg = 0x0 >> #5 0x00000000004361b4 in server_kill_window (w=0x20e3c10) at server-fn.c:278 >> s = 0x20e1270 >> next_s = 0x20fa660 >> target_s = 0x20e3d80 >> sg = 0x20e3d80 >> wl = 0x20e1760 >> #6 0x0000000000436633 in server_destroy_pane (wp=0x20e3d80) at >> server-fn.c:392 >> w = 0x20e3c10 >> old_fd = 9 >> ctx = {wp = 0x20e5430, s = 0x21} >> gc = {attr = 9 '\t', flags = 0 '\000', fg = 0 '\000', bg = 0 '\000', >> xstate = 0 '\000', xdata = "\000\000\000\220G\000\244\064"} >> #7 0x00000000004545b4 in window_pane_error_callback (bufev=0x20e5430, >> what=33, data=0x20e3d80) at window.c:898 >> wp = 0x20e3d80 >> #8 0x00000034a401adfa in bufferevent_readcb () from /lib64/libevent-2.0.so.5 >> No symbol table info available. >> #9 0x00000034a4010849 in event_base_loop () from /lib64/libevent-2.0.so.5 >> No symbol table info available. >> #10 0x0000000000438052 in server_loop () at server.c:207 >> No locals. >> #11 0x0000000000438031 in server_start (lockfd=6, lockfile=0x20ba000 "1") at >> server.c:198 >> pair = {7, 8} >> tv = {tv_sec = 1, tv_usec = 0} >> cause = 0x324f8e6df4 <fcntl+68> "H=" >> __func__ = "server_start" >> #12 0x0000000000405c52 in client_connect (path=0x691840 <socket_path> >> "/tmp/tmux-1000/default", start_server=1) at client.c:124 >> sa = {sun_family = 1, sun_path = "/tmp/tmux-1000/default", '\000' >> <repeats 85 times>} >> size = 22 >> fd = 6 >> lockfd = 6 >> lockfile = 0x20ba000 "1" >> __func__ = "client_connect" >> #13 0x0000000000405e8f in client_main (argc=0, argv=0x7fff8aecb370, flags=1) >> at client.c:221 >> cmd = 0x455c8f <osdep_event_init+9> >> cmdlist = 0x34a4012f6b <event_init+11> >> cmddata = {pid = 18592, session_id = 0, argc = 2097152, argv = >> '\000' <repeats 12 times>, >> "bU\003\244\064\000\000\000\021\000\000\000\000\000\000\000\r\000\000\000\062\000\000\000dU\003\244\064", >> '\000' <repeats 15 times>, >> "\377\177\000\000\000\000\000\000\377\177\000\000P\253\354\212\377\177\000\000\020\253\354\212\377\177\000\000\000\000\000\000\062", >> '\000' <repeats 31 times>, "\062", '\000' <repeats 11 times>, >> "\030\000\000\000\060\000\000\000`\261\354\212\377\177\000\000\240\260\354\212\377\177\000\000\000\000\000\000\377\177 >> >> \000\000\000\000\000\062\000\000\000\016\000\000\000\000\000\000\000??\204O2", >> '\000' <repeats 19 times>...} >> cmdflags = 7 >> fd = 0 >> ppid = 0 >> msg = MSG_COMMAND >> cause = 0x20003200000000 <Address 0x20003200000000 out of bounds> >> tio = {c_iflag = 0, c_oflag = 0, c_cflag = 0, c_lflag = 50, c_line = >> 0 '\000', c_cc = >> "\000\000\000\377\177\000\000\005\000\000\000\377\177\000\000??\204O2", >> '\000' <repeats 11 times>, c_ispeed = 0, c_ospeed = 4294967295} >> saved_tio = {c_iflag = 4605525, c_oflag = 0, c_cflag = 122, c_lflag >> = 0, c_line = 32 ' ', c_cc = >> "\261\354\212\000\000\000\000\000\000\000\000\062\000\000\000\000\000\000\000\377\177\000\000\000\000\000\000\377\177\000", >> <incomplete sequence \302>, c_ispeed = 0, c_ospeed = 0} >> #14 0x0000000000442100 in main (argc=0, argv=0x7fff8aecb370) at tmux.c:406 >> pw = 0x1 >> s = 0x7fff8aecce10 "emacsclient" >> path = 0x20b9bd0 "p\236\v\002" >> label = 0x20b9bb0 "\030\234\v\002" >> home = 0x7fff8aeccda9 "/home/dralston" >> var = 0x7fff8aecb588 >> opt = -1 >> flags = 1 >> quiet = 0 >> keys = 0 >> >> Thread 1 (Thread 0x7fa657f9b740 (LWP 3339)): >> #0 0x00000000004292a6 in layout_resize_check (lc=0x0, >> type=LAYOUT_LEFTRIGHT) at layout.c:249 >> #1 0x00000000004297b6 in layout_resize (w=0x20e3c10, sx=159, sy=39) at >> layout.c:415 >> #2 0x000000000042ec88 in recalculate_sizes () at resize.c:132 >> #3 0x00000000004368a4 in server_destroy_session (s=0x20e1270) at >> server-fn.c:455 >> #4 0x0000000000436672 in server_destroy_session_group (s=0x20e1270) at >> server-fn.c:403 >> #5 0x00000000004361b4 in server_kill_window (w=0x20e3c10) at server-fn.c:278 >> #6 0x0000000000436633 in server_destroy_pane (wp=0x20e3d80) at >> server-fn.c:392 >> #7 0x00000000004545b4 in window_pane_error_callback (bufev=0x20e5430, >> what=33, data=0x20e3d80) at window.c:898 >> #8 0x00000034a401adfa in bufferevent_readcb () from /lib64/libevent-2.0.so.5 >> #9 0x00000034a4010849 in event_base_loop () from /lib64/libevent-2.0.so.5 >> #10 0x0000000000438052 in server_loop () at server.c:207 >> #11 0x0000000000438031 in server_start (lockfd=6, lockfile=0x20ba000 "1") at >> server.c:198 >> #12 0x0000000000405c52 in client_connect (path=0x691840 <socket_path> >> "/tmp/tmux-1000/default", start_server=1) at client.c:124 >> #13 0x0000000000405e8f in client_main (argc=0, argv=0x7fff8aecb370, flags=1) >> at client.c:221 >> #14 0x0000000000442100 in main (argc=0, argv=0x7fff8aecb370) at tmux.c:406 > ------------------------------------------------------------------------------ Get your SQL database under version control now! Version control is standard for application code, but databases havent caught up. So what steps can you take to put your SQL databases under version control? Why should you start doing it? Read more to find out. http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users