Andreas Mohr wrote:
Hi,
On Sat, Feb 04, 2006 at 01:47:42PM +0100, James Trotter wrote:
On 2/4/06, Joris Huizer jorishuizer@planet.nl wrote:
I have this question: I have a game called "Knights and Merchants" which I sometimes play; I find it deadlocks each time after playing for an hour or so it seems it isn't a complete deadlock, sometimes some of sound comes through between intervals of minutes or so; harddisk activity seems extreme - the light is burning constantly. I then usually decide to kill the program; as it opens fullscreen I can't get to the xterm that launched it, so I try to get to a console; The system is so slow that it takes some time to get to a console <ctrl-alt-f1>, and login in may time out a few times before finaly getting in (the cure to that one is simple: login before starting the game...) - then it takes another minute or so to run ps and kill the wine process
This really sounds like a memory leak to me. Usually I'd use valgrind ( http://valgrind.org/) to find memory leaks and such. Valgrind 3.1.0 works with wine, but it produces alot of output you'd have to look through and the program will run insanely slow. It might be worth a try.
I'd bet this isn't a "deadlock". Instead, your program is consuming massive amounts of memory that your system cannot cope with, thus quickly running into swap and tearing the whole system performance down due to excessive swap activity. No deadlock at all, simply massive overload.
A normal memory leak sounds less plausible to me, too.
May I suggest that this is caused by a memory "allocation" of a pointer variable instead of a memory size variable? Pointers (memory addresses) usually are in the 0x40XXXXXX or 0x08XXXXXX range, so if you take those values as amount of memory to allocate...
IOW, perhaps there is a function parameter count mismatch in .spec files or some other random stack trashing that leads to such high memory allocation due to accessing the wrong variable.
You should probably try a ulimit -S -m 128000000 , that will most likely kill the process then when everything goes haywire, thus supporting my theory at least halfway.
Andreas Mohr
indeed the program got killed... at least it's a memory problem (maybe it was not the best situation, but I was logged in at a console and some output on running out of memory was written there) I don't really know what to look for, but as far as I see there isn't much interesting in the log, just a few fixme's that are repeated lots of times, and then these critical section timeouts:
err:ntdll:RtlpWaitForCriticalSection section 0x40a01560 "gdiobj.c: GDI_level" wait timed out in thread 0009, blocked by 0000, retrying (60 sec) .... err:ntdll:RtlpWaitForCriticalSection section 0x4110f380 "x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0009, blocked by 000d, retrying (60 sec) ... err:ntdll:RtlpWaitForCriticalSection section 0x40a01560 "gdiobj.c: GDI_level" wait timed out in thread 0009, blocked by 000d, retrying (60 sec)
There also a lot of error lines on dsound: err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 3, block size = 2 with varying len values
I put the complete log online at home.planet.nl/~huize784/kam.log.bz2 as I think it's too much to send as attachment (compressed, it is 107KB)
regards,
Joris
end of the log (hopefully the relevant part) :
fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x5b09842c,0x571bf94c,0x5b098408): stub err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 221, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 3, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 221, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 3, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 331, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 309, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 3, block size = 2 fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x596bea7c,0x48629a7c,0x596bea58): stub fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x5b0a0624,0x564301d4,0x5b0a0600): stub err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 441, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 3, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 441, block size = 2 err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 3, block size = 2 fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x5b0a0624,0x47dfcb2c,0x5b0a0600): stub err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 251, block size = 2 fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) err:ntdll:RtlpWaitForCriticalSection section 0x40a01560 "gdiobj.c: GDI_level" wait timed out in thread 0009, blocked by 0000, retrying (60 sec) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x596bea7c,0x47d28d0c,0x596bea58): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) err:ntdll:RtlpWaitForCriticalSection section 0x4110f380 "x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0009, blocked by 000d, retrying (60 sec) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fad8,e2,0,0x596bea7c,0x482523d4,0x596bea58): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x596bea7c,0x48629a7c,0x596bea58): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc5c,e2,0,0x403caf6c,0x5b0a07bc,0x403caf48): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x596bea7c,0x564301d4,0x596bea58): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x562ab2c4,0x47dfcb2c,0x562ab2a0): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc98,e2,0,0x5afc51d4,0x550fc284,0x5afc51b0): stub err:dsound:DSOUND_MixInBuffer length not a multiple of block size, len = 427, block size = 2 fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc98,e2,0,0x5bda5284,0x537f1314,0x5bda5260): stub fixme:ddraw:Main_DirectDraw_WaitForVerticalBlank (0x403d1a00)->(flags=0x00000001,handle=(nil)) err:ntdll:RtlpWaitForCriticalSection section 0x40a01560 "gdiobj.c: GDI_level" wait timed out in thread 0009, blocked by 000d, retrying (60 sec) fixme:wave:DSD_CreateSecondaryBuffer (0x403e5270,0x4084fc48,e2,0,0x403caf6c,0x48353294,0x403caf48): stub Killed