glx: Demand success from CreateContext requests (v2)
authorAdam Jackson <ajax@redhat.com>
Tue, 7 Aug 2018 20:55:37 +0000 (16:55 -0400)
committerAdam Jackson <ajax@redhat.com>
Wed, 7 Nov 2018 17:38:05 +0000 (12:38 -0500)
commit16f1023037908a683c62521af4d44e28023f2630
tree012bb55162844f2e7cffdb9c641754144e57120c
parentf7fae7f64e126d0a92bc1f5f875164f77232364d
glx: Demand success from CreateContext requests (v2)

GLXCreate{,New}Context, like most X resource creation requests, does not
emit a reply and therefore is emitted into the X stream asynchronously.
However, unlike most resource creation requests, the GLXContext we
return is a handle to library state instead of an XID. So if context
creation fails for any reason - say, the server doesn't support indirect
contexts - then we will fail in strange places for strange reasons.

We could make every GLX entrypoint robust against half-created contexts,
or we could just verify that context creation worked. Reuse the
__glXIsDirect code to do this, as a cheap way of verifying that the
XID is real.

glXCreateContextAttribsARB solves this by using the _checked version of
the xcb command, so effectively this change makes the classic context
creation paths as robust as CreateContextAttribs.

v2: Better use of Bool, check that error != NULL first (Olivier Fourdan)

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/glx/glxcmds.c