Numbers indicate the height of the window; width omitted because it's irrelevant. Screen BarnOwl Ncurses ====== ======= ======= | | *attach* | SIGWINCH ------> resizepending = 1 | | | * new main loop iteration * | owl_global_resize() | endwin() ----------------> screen->_endwin = 1 | reset_shell_mode (flicker out) | / <------------------------ / 26 ioctl(TIOCGWINSZ) = 26 | | | g->lines = 26 | resizeterm(26) ----------> curscr now 26 | | | / <------------------------ / | relayouting "Oops! I relayouting forgot the relayouting status bar" relayouting SIGWINCH ------> resizepending = 1 | relayouting | typwin ends y = 26-1 25 | | doupdate() --------------> _endwin = 1, so... | ioctl(TIOCGWINSZ) = 25 | resizeterm(25) | curscr now 25 | typwin now off-screen w.r.t curscr | reset_prog_mode (flicker in) | / <------------------------ / | owl_select() | got 'q' | popless:quit | owl_popwin_down | owl_function_full_redisplay | redrawwin(typwin) -------> wredrawln | bad bounds check | memset in bad location | SEGV