[Bug 34847] New: The Swapper 2.0.x (GOG.com) crashes on startup (OpenGL glBindTexture on thread with no active gl context)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Nov 2 18:12:24 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=34847

             Bug #: 34847
           Summary: The Swapper 2.0.x (GOG.com) crashes on startup (OpenGL
                    glBindTexture on thread with no active gl context)
           Product: Wine
           Version: 1.7.5
          Platform: x86
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: -unknown
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: focht at gmx.net
    Classification: Unclassified


Hello folks,

as the summary says... it crashes with managed backtrace.

Prerequisite: 'winetricks -q dotnet40'

Additionally 'winetricks -q gdiplus' is needed to work around bug 31293
("Multiple .NET apps need GdipPrivateAddFontFile (MTGO v3 launcher, Harmony
Practice 3")

Console output:

--- snip ---
$ pwd
/home/focht/.wine/drive_c/GOG Games/The Swapper
...
$ wine ./TheSwapper.exe
...
fixme:shell:URL_ParseUrl failed to parse L"Poly2Tri"
fixme:shell:URL_ParseUrl failed to parse L"Antlr3.Runtime"
fixme:shell:URL_ParseUrl failed to parse L"HackFlipcodeDecomposer"
fixme:thread:NtQueryInformationThread info class 16 not supported yet

Unhandled Exception: System.AccessViolationException: Attempted to read or
write protected memory. This is often an indication that other memory is
corrupt.
   at OpenTK.Graphics.OpenGL.GL.Core.BindTexture(TextureTarget target, UInt32
texture)
   at OpenTK.Graphics.OpenGL.GL.BindTexture(TextureTarget target, Int32
texture)
   at
#=qspupw6aAQRvhz2r1wc647d1$NzZyWbb7974SWlkKFpjJ1VeukGn_wvGCMRx7aBSiWh1iuicIyacRGfVqgBm9Rg==.#=qxG1RzIHGHPuJuQ9DtG4yhQ==(Int32
#=qsSRVY4FmFS4iYRT1PxaVNw==)
   at FacepalmGames.TrueEngine.Graphics.OpenGL.OpenGL_Texture.Dispose()
   at
#=qULyUf5doESIVBNnEWBr9jN$hFDnWSfTNkblxZVPkoCXVICMIlUf3Oz5uUy69udDx.#=qbCGlUo53gCwDv9X$E_5Iipk92Zlu$dzUi0ZnO80onPs=(Delay
#=qVN6KXXzrwp4xa_tgGyT1jQ==)
   at FacepalmGames.TrueEngine.Delay.Update(Single realDeltatime, Single
deltatime)
   at FacepalmGames.TrueEngine.DelayManager.Update(Single realDeltatime, Single
deltatime)
   at
FacepalmGames.TrueEngine.Entities.Scene.#=qcxzqmQNZ7TSahScA1o$Rrw==(Single
#=q6De8gKPg5ESl6NuDXrBRcA==, Single
#=qaucCZLW9S0zUXSlrUo6iYnnvSSi1tmqip0uXE0QXrwA=, Single
#=qqc2gLOtgfcZeiY4LXS3whw==, Single
#=qO9TZ3LUfP6bxhsIfL_rR0Z7xK3bfiaKUx1IIuEZVA0E=)
   at
FacepalmGames.TrueEngine.Entities.SceneManager.#=qG1mfX3aU5i$$4RZvkfzUkw==(Single
#=qdFIjUqk3WRECcfuHyBXXZA==, Single
#=q3QDB3JyyarsE0ZUqbDVMZblSntu_9cgwTl_01PI3pZA=, Single
#=qrXUE910DbtLTh2XYLVIrDA==, Single
#=qyNuK7AKKIdZJOCkcLFmmipJZCxMqc8TMaiv9w3U2v7c=)
   at FacepalmGames.TrueEngine.GameStateController.OnUpdateFrame()
   at FacepalmGames.TrueEngine.UpdateManager.#=qH_xcAJvh9NICLf1lxmJf1g==()
   at FacepalmGames.TrueEngine.UpdateManager.#=qYThq6FqzXGbBWu3gjG$5Ug==()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
...
--- snip ---

Relevant part of trace log:

--- snip ---
$ WINEDEBUG=+tid,+seh,+loaddll,+process,+opengl,+wgl wine ./TheSwapper.exe
...
002b:trace:wgl:glxdrv_wglMakeCurrent (0x30033,0x185ea0)
002b:trace:wgl:describeContext  Context 0x185ea0 have (vis:(nil)):
002b:trace:wgl:describeContext  - FBCONFIG_ID 0x107
002b:trace:wgl:describeContext  - VISUAL_ID 0x24
002b:trace:wgl:glxdrv_wglMakeCurrent hdc 0x30033 drawable 4e00029 fmt 0x188558
ctx 0x7d9d07b0
002b:trace:wgl:glxdrv_wglMakeCurrent 0x30033,0x185ea0 returning 1
...
002b:trace:opengl:glBindBuffer (34962, 1)
002b:trace:opengl:glBindBuffer (34963, 2)
002b:trace:opengl:glVertexPointer (3, 5126, 24, (nil))
002b:trace:opengl:glNormalPointer (5126, 24, 0xc)
002b:trace:opengl:glPushMatrix ()
002b:trace:opengl:glTranslatef (0.000000, 0.000000, 1000.000000)
002b:trace:opengl:glScalef (10100.000000, 10100.000000, 10100.000000)
002b:trace:opengl:glUseProgram (49)
002b:trace:opengl:glUniform1f (3, 65.000000)
002b:trace:opengl:glUniform1f (2, 64000.000000)
003d:trace:opengl:glBindTexture (3553, 1)
003d:trace:seh:raise_exception code=c0000005 flags=0 addr=0x7e08f55b
ip=7e08f55b tid=003d
003d:trace:seh:raise_exception  info[0]=00000000
003d:trace:seh:raise_exception  info[1]=0000003c
003d:trace:seh:raise_exception  eax=00000000 ebx=7e103000 ecx=00000000
edx=0c2aef88 esi=07db0fa0 edi=0c2add74
003d:trace:seh:raise_exception  ebp=0c2add60 esp=0c2add20 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010206 
--- snip ----

Debugger:

--- snip ----
Unhandled exception: page fault on read access to 0x0000003c in 32-bit code
(0x7e09b55b).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:7e09b55b ESP:07fddd20 EBP:07fddd60 EFLAGS:00010246(  R- --  I  Z- -P- )
 EAX:00000000 EBX:7e10f000 ECX:00000de1 EDX:00000001
 ESI:079415e0 EDI:07fddd74
Stack dump:
0x07fddd20:  00090f04 80000000 00000000 07fddd9c
0x07fddd30:  79161f69 00000000 00000000 79161f86
0x07fddd40:  7ffb0000 c02492f8 07fde4dc 00000000
0x07fddd50:  079415e0 00000000 00000000 018bef38
0x07fddd60:  07fdddac 033d4c18 00000de1 00000001
0x07fddd70:  c7ecbc88 79145d80 07fde4dc 00000008
000c: sel=0067 base=00000000 limit=00000000 16-bit --x
Backtrace:
=>0 0x7e09b55b glBindTexture+0x8c(target=0xde1, texture=0x1)
[/home/focht/projects/wine/wine-git/dlls/opengl32/opengl_norm.c:65] in opengl32
(0x07fddd60)
  1 0x033d4c18 (0x07fdddac)
  2 0x033d4b43 (0x07fdddd4)
--- snip ----

Disassembly/debugger tells it's crashing because glTable is NULL.

--- snip ---
glBindTexture+1B    mov     [esp+20h], eax
glBindTexture+1F    mov     eax, [esp+20h]
glBindTexture+23    mov     eax, [eax+0BE8h] ; NtCurrentTeb()->glTable
glBindTexture+29    mov     [esp+2Ch], eax
...
glBindTexture+88    mov     eax, [esp+2Ch] ; NtCurrentTeb()->glTable
glBindTexture+8C    mov     eax, [eax+3Ch] ; *boom* funcs->gl.p_glBindTexture
glBindTexture+8F    mov     edx, [ebp+texture]
glBindTexture+92    mov     [esp+4], edx
glBindTexture+96    mov     edx, [ebp+target]
glBindTexture+99    mov     [esp], edx
glBindTexture+9C    call    eax
glBindTexture+9E    mov     ebx, [ebp+var_4]
glBindTexture+A1    leave
glBindTexture+A2    retn    8
--- snip ---

Source:
http://source.winehq.org/git/wine.git/blob/2480c9395b0b9a14ad1747d2c4621e0cd3a21fca:/dlls/opengl32/opengl_norm.c#l59

--- snip ---
59 /***********************************************************************
60  * glBindTexture (OPENGL32.@)
61  */
62 void WINAPI glBindTexture( GLenum target, GLuint texture ) {
63   const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
64   TRACE("(%d, %d)\n", target, texture );
65   funcs->gl.p_glBindTexture( target, texture );
66 }
--- snip ---

glBindTexture() is called on a thread (tid 0x3d) with no active OpenGL context.
The current context is on tid 0x2b.

Not sure why this gl call happens on a different thread ... maybe it's some
asynchronous texture loading in worker thread.
Anyway, the log doesn't show wgl "makecurrent" nor creation of a second gl
context for the secondary thread.

$ sha1sum setup_the_swapper_2.0.0.2.exe 
174e7db9b1d187eac4fb92e94db2712ce69ba614  setup_the_swapper_2.0.0.2.exe

$ du -sh setup_the_swapper_2.0.0.2.exe 
722M    setup_the_swapper_2.0.0.2.exe

$ wine --version
wine-1.7.5-251-gbcf4ded

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list