#213 crash glGetError

v3.0.0
closed-fixed
nobody
GLUT (25)
5
2009-07-18
2009-05-30
No

With PyOpenGL 3.0.0 and Python 2.6.2 (on x86),

the following simple file causes a crash:

from OpenGL.GLUT import *
glutInit()
glutInitDisplayMode(GLUT_RGB)
=======================

(gdb) run gltest.py
Starting program: /usr/local/bin/python gltest.py
[Thread debugging using libthread_db enabled]
[New Thread 0xb7da28d0 (LWP 1302)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb7da28d0 (LWP 1302)]
0xb7c1b196 in glGetError () from /usr/lib/libGL.so.1
(gdb) where
#0 0xb7c1b196 in glGetError () from /usr/lib/libGL.so.1
#1 0xb7c91f67 in ffi_call_SYSV () at /home/stephanh/DOWNLOAD/Python-2.6.2/Modules/_ctypes/libffi/src/x86/sysv.S:61
#2 0xb7c91da6 in ffi_call (cif=0xbf87d9a8, fn=0xb7c1b190 <glGetError>, rvalue=0x0, avalue=0xbf87da20)
at /home/stephanh/DOWNLOAD/Python-2.6.2/Modules/_ctypes/libffi/src/x86/ffi.c:213
#3 0xb7c8c4aa in _CallProc (pProc=0xb7c1b190 <glGetError>, argtuple=0xb7d6202c, flags=<value optimized out>, argtypes=0x0,
restype=0x86b85fc, checker=0x0) at /home/stephanh/DOWNLOAD/Python-2.6.2/Modules/_ctypes/callproc.c:815
#4 0xb7c83da9 in CFuncPtr_call (self=0x8700304, inargs=0xb7d6202c, kwds=0x0)
at /home/stephanh/DOWNLOAD/Python-2.6.2/Modules/_ctypes/_ctypes.c:3857
#5 0x0805f6ca in PyObject_Call (func=0x8700304, arg=0xb7d6202c, kw=0x0) at Objects/abstract.c:2492
#6 0x080dacfa in PyEval_EvalFrameEx (f=0x87a6444, throwflag=0) at Python/ceval.c:3917
#7 0x080dddc8 in PyEval_EvalCodeEx (co=0x871d068, globals=0x870cdfc, locals=0x0, args=0xb7d507e0, argcount=4, kws=0x0,
kwcount=0, defs=0x871c6d8, defcount=2, closure=0x0) at Python/ceval.c:2968
#8 0x08131fef in function_call (func=0x8713df4, arg=0xb7d507d4, kw=0x0) at Objects/funcobject.c:524
#9 0x0805f6ca in PyObject_Call (func=0x8713df4, arg=0xb7d507d4, kw=0x0) at Objects/abstract.c:2492
#10 0x080665ca in instancemethod_call (func=0x8713df4, arg=0xb7d507d4, kw=0x0) at Objects/classobject.c:2579
#11 0x080640d1 in PyObject_CallFunctionObjArgs (callable=0xb7cd2dec) at Objects/abstract.c:2492
#12 0xb7c83de3 in CFuncPtr_call (self=0x876043c, inargs=0xb7d5232c, kwds=0x0)
at /home/stephanh/DOWNLOAD/Python-2.6.2/Modules/_ctypes/_ctypes.c:3873
#13 0x0805f6ca in PyObject_Call (func=0x876043c, arg=0xb7d5232c, kw=0x0) at Objects/abstract.c:2492
#14 0x080dacfa in PyEval_EvalFrameEx (f=0x86a0f8c, throwflag=0) at Python/ceval.c:3917
#15 0x080dddc8 in PyEval_EvalCodeEx (co=0xb7d8f6e0, globals=0xb7d850b4, locals=0xb7d850b4, args=0x0, argcount=0, kws=0x0,
kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:2968
#16 0x080ddf27 in PyEval_EvalCode (co=0xb7d8f6e0, globals=0xb7d850b4, locals=0xb7d850b4) at Python/ceval.c:522
#17 0x080fbb01 in PyRun_FileExFlags (fp=0x8653cf8, filename=0xbf87f8f8 "gltest.py", start=257, globals=0xb7d850b4,
locals=0xb7d850b4, closeit=1, flags=0xbf87e718) at Python/pythonrun.c:1335
#18 0x080fbe5a in PyRun_SimpleFileExFlags (fp=0x8653cf8, filename=0xbf87f8f8 "gltest.py", closeit=1, flags=0xbf87e718)
at Python/pythonrun.c:931
#19 0x0805ae42 in Py_Main (argc=1, argv=0xbf87e7e4) at Modules/main.c:599
#20 0x08059f32 in main (argc=-1081615896, argv=0xb7c91da6) at ./Modules/python.c:23

Discussion

  • Stephan Houben

    Stephan Houben - 2009-05-31

    Hi all,

    Turns out the problem is caused by the implicit call to glGetError()
    caused by glutInitDisplayMode() which is done before a window
    is created.

    Presumably, this means no OpenGL context is created either at this point.
    If I do a glutCreateWindow() before glutInitDisplayMode() everything is fine.

    I am not sure if doing a glGetError before a GL context is created is supposed to be legal.
    If it is, the blame rests on the GL implementation (mesa) but otherwise it is
    bug in PyOpenGL. I think calling glutInitDisplayMode() before glutCreateWindow()
    is ordinarily an expected order.

    Stephan

     
  • Mike C. Fletcher

    • status: open --> closed-fixed
     
  • Mike C. Fletcher

    Thanks for the bug report, PyOpenGL 3.0.1 (current head) has fixed the problem with the implicit calling of glGetError, which is no longer safe on Linux platforms.

     

Log in to post a comment.