[Mesa-dev] [Mesa-stable] [PATCH 4/4] glx: fix error code when there is no context bound
Tapani Pälli
tapani.palli at intel.com
Fri Feb 12 05:34:29 UTC 2016
On 02/12/2016 02:54 AM, Emil Velikov wrote:
> On 11 February 2016 at 12:04, Tapani Pälli <tapani.palli at intel.com> wrote:
>> From: Bernard Kilarski <bernard.r.kilarski at intel.com>
>>
>> Signed-off-by: Bernard Kilarski <bernard.r.kilarski at intel.com>
>> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
>> Cc: "11.0 11.1" <mesa-stable at lists.freedesktop.org
>> ---
>> src/glx/glxcmds.c | 2 +-
>> src/glx/query_renderer.c | 4 ++--
>> src/glx/tests/query_renderer_unittest.cpp | 4 ++++
>> 3 files changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c
>> index 93e8db5..4db67ec 100644
>> --- a/src/glx/glxcmds.c
>> +++ b/src/glx/glxcmds.c
>> @@ -1727,7 +1727,7 @@ __glXSwapIntervalSGI(int interval)
>> CARD32 *interval_ptr;
>> CARD8 opcode;
>>
>> - if (gc == NULL) {
>> + if (gc == NULL || gc == &dummyContext) {
>> return GLX_BAD_CONTEXT;
>> }
>>
>> diff --git a/src/glx/query_renderer.c b/src/glx/query_renderer.c
>> index 9108ec2..d49b8fe 100644
>> --- a/src/glx/query_renderer.c
>> +++ b/src/glx/query_renderer.c
>> @@ -106,7 +106,7 @@ glXQueryCurrentRendererIntegerMESA(int attribute, unsigned int *value)
>> {
>> struct glx_context *gc = __glXGetCurrentContext();
>>
>> - if (gc == NULL)
>> + if (gc == NULL || gc == &dummyContext)
>> return False;
>>
>> return __glXQueryRendererInteger(gc->psc, attribute, value);
>> @@ -166,7 +166,7 @@ glXQueryCurrentRendererStringMESA(int attribute)
>> {
>> struct glx_context *gc = __glXGetCurrentContext();
>>
>> - if (gc == NULL)
>> + if (gc == NULL || gc == &dummyContext)
> Unless I'm missing something __glXGetCurrentContext() can never return
> NULL, right ?
This was my initial impression also ... but I'm not sure what happens
here but unit tests (glx-test) for some reason completely explode if you
take out the null check and try running 'make check'.
I think that is why also the dummyContext is introduced in those tests.
I played around a bit with this change and linking phase with glx-test
starts to print quite weird errors, actually complete unrelated ones, I
guess because it cannot find the 'extern' declared 'dummyContext'. I'm
not sure if this is actually problem with the tests rather than this code.
> In that case I see two possible solutions
> - Swap all the NULL checks, for == &dummyContext (some commit
> message would be great) or
> - Drop the null checks in this patch, and explain why we do that only
> here (the xid and vtable are implicitly zeroed for dummyContext, thus
> things will just work).
>
> Leaning for the latter for stable as it's shorter. Although doing the
> former on top (for master alone) also sounds like a good idea imho.
>
>> return False;
>>
>> return __glXQueryRendererString(gc->psc, attribute);
>> diff --git a/src/glx/tests/query_renderer_unittest.cpp b/src/glx/tests/query_renderer_unittest.cpp
>> index 2f3c4ef..4c96260 100644
>> --- a/src/glx/tests/query_renderer_unittest.cpp
>> +++ b/src/glx/tests/query_renderer_unittest.cpp
>> @@ -40,6 +40,10 @@ struct attribute_test_vector {
>> #define E(x) { # x, x }
>>
>>
>> +/* This is necessary so that we don't have to link with glxcurrent.c
>> + * which would require us to link with X libraries and what not.
>> + */
>> +struct glx_context dummyContext;
>>
> Perhaps we should initialize it (like in glxcurrent.c) for
> consistency, if anything else ?
>
> -Emil
>
More information about the mesa-dev
mailing list