[PATCH weston] terminal: Fix crash due to race condition in init

Quentin Glidic sardemff7+wayland at sardemff7.net
Wed Aug 31 22:56:19 UTC 2016


On 30/08/2016 04:07, Yong Bakos wrote:
> On Aug 29, 2016, at 4:28 PM, Bryce Harrington <bryce at osg.samsung.com> wrote:
>>
>> 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 at osg.samsung.com>
>
> I couldn't replicate the issue, but the fix seems innocuous enough.
> Someone with more experience should chime in, but this is:
>
> Reviewed-by: Yong Bakos <ybakos at humanoriented.com>


Don’t see any harm having it as a quick fix. I wonder if xdg_shell_v6 
initial configure can be used as a sync point for all this?

Pushed:
c6ae812..5c611d9  master -> master

Cheers,

>
>> ---
>> clients/terminal.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/clients/terminal.c b/clients/terminal.c
>> index 6257cb7..34bc2c9 100644
>> --- a/clients/terminal.c
>> +++ b/clients/terminal.c
>> @@ -2976,6 +2976,7 @@ terminal_create(struct display *display)
>> 	cairo_surface_destroy(surface);
>>
>> 	terminal_resize(terminal, 20, 5); /* Set minimum size first */
>> +	terminal_resize_cells(terminal, 20, 5);
>> 	terminal_resize(terminal, 80, 25);
>>
>> 	wl_list_insert(terminal_list.prev, &terminal->link);
>> --
>> 1.9.1
>>
>> _______________________________________________
>> wayland-devel mailing list
>> wayland-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
>


-- 

Quentin “Sardem FF7” Glidic


More information about the wayland-devel mailing list