Andreas Mohr wrote:
Hi,

On Sat, Feb 04, 2006 at 01:47:42PM +0100, James Trotter wrote:

On 2/4/06, Joris Huizer <[EMAIL PROTECTED]> 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


Reply via email to