terminal: Fix crash due to race condition in init

weston-terminal intermittently crashes on startup.  This occurs because
some parameters in the weston_terminal structure such as data_pitch,
don't get set to non-zero until the resize_handler() callback gets
triggered.  That callback makes a call to terminal_resize_cells(), to
calculate the proper values for these parameters.

On occasion, the resize handler call is slow to resolve, and the program
proceeds to start processing characters for the terminal window.  With
the parameters defaulting to zero, certain calculations come out wrong,
leading the program to attempt to scroll the buffer when it shouldn't,
and thus follows the crash.

Instead, force the call to terminal_resize_cells() during the init, with
some dummy defaults, to ensure the parameters are always non-zero.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=97539
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Yong Bakos <ybakos@humanoriented.com>
This commit is contained in:
Bryce Harrington 2016-08-29 16:28:08 -07:00 committed by Quentin Glidic
parent c6ae8126e1
commit 5c611d933f
No known key found for this signature in database
GPG Key ID: AC203F96E2C34BB7

View File

@ -2976,6 +2976,7 @@ terminal_create(struct display *display)
cairo_surface_destroy(surface); cairo_surface_destroy(surface);
terminal_resize(terminal, 20, 5); /* Set minimum size first */ terminal_resize(terminal, 20, 5); /* Set minimum size first */
terminal_resize_cells(terminal, 20, 5);
terminal_resize(terminal, 80, 25); terminal_resize(terminal, 80, 25);
wl_list_insert(terminal_list.prev, &terminal->link); wl_list_insert(terminal_list.prev, &terminal->link);