Opened 9 years ago

Closed 9 years ago

Last modified 12 months ago

#5545 closed defect (fixed)

OPENGL: Crashing on updateScreen

Reported by: lordhoto Owned by:
Priority: normal Component: Ports
Keywords: Cc:
Game: Beneath a Steel Sky

Description

ScummVM trunk r54830
Arch Linux/amd64 g++ 4.5.1
SDL/OpenGL backend

When OSystem::updateScreen is called from a different thread (like a timer callback or the like) the OpenGL graphics code will crash. This is because the OpenGL context is not shared between threads, thus all OpenGL functions relying on a context or resources will cause crashes.

A good candidate of testing is the SKY engine. Just start up BASS (CD) and watch the Intro. When the old man will start talking ScummVM will crash.

Here is a backtrace:

#0 0x00007ffff69d7ee9 in glClear () from /usr/lib/libGL.so.1
#1 0x000000000101dd77 in OpenGLGraphicsManager::internUpdateScreen (this=0x1b5f290)
at ../git/backends/graphics/opengl/opengl-graphics.cpp:942
#2 0x000000000102084a in OpenGLSdlGraphicsManager::internUpdateScreen (this=0x1b5f290)
at ../git/backends/graphics/openglsdl/openglsdl-graphics.cpp:420
#3 0x000000000101b9d3 in OpenGLGraphicsManager::updateScreen (this=0x1b5f290) at ../git/backends/graphics/opengl/opengl-graphics.cpp:401
#4 0x0000000001020055 in OpenGLSdlGraphicsManager::updateScreen (this=0x1b5f290)
at ../git/backends/graphics/openglsdl/openglsdl-graphics.cpp:234
#5 0x0000000001016719 in ModularBackend::updateScreen (this=0x1a78600) at ../git/backends/modular-backend.cpp:160
#6 0x0000000000de5b64 in Sky::Screen::processSequence (this=0x1f4c270) at ../git/engines/sky/screen.cpp:497
#7 0x0000000000de556a in Sky::Screen::handleTimer (this=0x1f4c270) at ../git/engines/sky/screen.cpp:403
#8 0x0000000000dcac5d in Sky::SkyEngine::gotTimerTick (this=0x1ae3cb0) at ../git/engines/sky/sky.cpp:394
#9 0x0000000000dcac3c in Sky::SkyEngine::timerHandler (refCon=0x1ae3cb0) at ../git/engines/sky/sky.cpp:390
#10 0x000000000102d76a in DefaultTimerManager::handler (this=0x1a7f580) at ../git/backends/timer/default/default-timer.cpp:108
#11 0x000000000102bb57 in timer_handler (interval=10, param=0x1a7f580) at ../git/backends/timer/sdl/sdl-timer.cpp:34
#12 0x00007ffff646b238 in ?? () from /usr/lib/libSDL-1.2.so.0
#13 0x00007ffff64b1807 in ?? () from /usr/lib/libSDL-1.2.so.0
#14 0x00007ffff646ae15 in ?? () from /usr/lib/libSDL-1.2.so.0
#15 0x00007ffff64af4c9 in ?? () from /usr/lib/libSDL-1.2.so.0
#16 0x00007ffff6243cb0 in start_thread () from /lib/libpthread.so.0

Ticket imported from: #3131952. Ticket imported from: bugs/5545.

Change History (3)

comment:1 by dhewg, 9 years ago

should be fixed with f621f6a

comment:2 by dhewg, 9 years ago

Resolution: fixed
Status: newclosed

comment:3 by digitall, 12 months ago

Component: Ports
Game: Beneath a Steel Sky
Note: See TracTickets for help on using tickets.