[Gtkradiant] [Bug 53] mouseclick + drag in 2d view causes stack overflow

gtkradiant@zerowing.idsoftware.com gtkradiant@zerowing.idsoftware.com
Sun, 13 May 2001 15:29:29 -0500


------- Additional Comments From ttimo@idsoftware.com  2001-05-13 15:29 -------
<RR2DO2>	it's constantly increasing memory when you're dragging a brush
<RR2DO2>	and it keeps increasing as long as you don't finalize it
<RR2DO2>	so a brush created with one drag uses less memory than one 
created with two
[TTimo]	BC detects leaks?
<RR2DO2>	BC?
[TTimo]	ah
[TTimo]	food is there
[TTimo]	bbl8r
<RR2DO2>	k
[TTimo]	BC = Bound Checkers
[TTimo]	I will look when I get back
*** TTimo is now known as TTimoAFK
<SmallPileofGibs>	RR2DO2: any click+drag does it
<SmallPileofGibs>	in xy view
<RR2DO2>	yup
<RR2DO2>	it's odd
<SmallPileofGibs>	any call to XYMousemove i guess
<SmallPileofGibs>	xywnd:: mousemoved perhaps
<RR2DO2>	hm
<RR2DO2>	spog
<RR2DO2>	// lbutton without selection = drag new brush
<RR2DO2>	if (m_nButtonstate == MK_LBUTTON && !m_bPress_selection && 
g_qeglobals.d_select_mode != sel_curvepoint)
<RR2DO2>	{
<RR2DO2>	NewBrushDrag (x, y);
<RR2DO2>	return;
<RR2DO2>	}
<RR2DO2>	^^ what if it already _is_ creating a new brush?
<RR2DO2>	the brush you are creating
<RR2DO2>	is that a selected brush?
<SmallPileofGibs>	no, that's MouseDown
<SmallPileofGibs>	only happens on the click
<RR2DO2>	no this is out of XY_MouseMoved
<SmallPileofGibs>	hrm
<RR2DO2>	what it seems to be doing is every frame you move the mouse is 
delete the selected brushes and recreate a new one of the bigger size
<SmallPileofGibs>	i did see that.. i remember going through it and 
figuring out what it did
<SmallPileofGibs>	i think i ended up deciding it wasn't caused by that
<SmallPileofGibs>	probably
<RR2DO2>	hm
<RR2DO2>	having a brush just selected
<RR2DO2>	and clicking outside of it, not dragging, seems to do the same
<RR2DO2>	(increasing memory with no reason that is)
<SmallPileofGibs>	yes
<RR2DO2>	hm
<SmallPileofGibs>	holding ctrl+LMB and dragging does the same
<SmallPileofGibs>	=)
<RR2DO2>	maybe it's the undo system?
<SmallPileofGibs>	with nothing selected
<SmallPileofGibs>	after creating no brushes
<SmallPileofGibs>	hrm
<SmallPileofGibs>	djbob tracked it to gtk-1.3.dll
<SmallPileofGibs>	so did i
<RR2DO2>	hm :/
<SmallPileofGibs>	djbob got further
<SmallPileofGibs>	but we could be both wrong
*** Equim (equim@host213-122-145-16.btinternet.com) has joined #gtkradiant
*** neo279 (Lister279@du-002-0035.freeuk.com) has left IRC []
[TTimoAFK]	how do you watch memory usage
*** TTimoAFK is now known as TTimo
<RR2DO2>	win2k
[TTimo]	I'm gonna try against a BC build see if it reports anything
<RR2DO2>	it shows how much KB an app is using
[TTimo]	ok
[TTimo]	just checking
[TTimo]	(that's not very fine-grained)
<RR2DO2>	it does clear all the memory on exit though
<RR2DO2>	so it gets allocated and destroyed nicely it seems
<RR2DO2>	but I suspect it gets allocated at wrong and too many times
[TTimo]	you mean it's not leaking then
<SmallPileofGibs>	eventually it overflows the stack with calls to 
something.. could be in gtk-1.3.dll
<SmallPileofGibs>	it's not leaking no, just seems to be an allocating in 
an ever-increasing loop or something
[TTimo]	and when does that get released?
[TTimo]	when you release the mouse button?
<RR2DO2>	no
<RR2DO2>	when you close radiant
[TTimo]	so it's not leaking
[TTimo]	it's released normally
[TTimo]	I don't understand how you can assert that it's not a leak if you say 
the mem is released when you exit Radiant
*** W2k (~w2k@as1-5-1.ulr.s.bonet.se) has left IRC [Read error to W2k[as1-5-
1.ulr.s.bonet.se]: Connection reset by peer]
*** W2k (~w2k@as1-5-1.ulr.s.bonet.se) has joined #gtkradiant
*** W2k is now known as W2k[cs]
<SmallPileofGibs>	TTimo: the leak (or no) is not the problem
<SmallPileofGibs>	the problem is the stack overflow and crash that 
happens too =)
*** W2k[cs] is now known as W2k
*** Equim is now known as Equim-q3
[TTimo]	those two things are probably related and the actual problem is to find 
out what happens .. if BC would output a link error it would be the most 
straightforward way to find out
[TTimo]	leak error
[TTimo]	god the winding code is a f*g hack
[TTimo]	it's utterly ugly
<SmallPileofGibs>	hrm, i don't think i tracked it to gtk-1.3
<SmallPileofGibs>	it's in XY_draw
<SmallPileofGibs>	pasting stack..
<SmallPileofGibs>	$$$00001() line 79
<SmallPileofGibs>	XYWnd::XY_Draw() line 2875
<SmallPileofGibs>	XYWnd::OnExpose() line 3228
<SmallPileofGibs>	expose(_GtkWidget * 0x0149e090, _GdkEventExpose * 
0x0003720c, void * 0x03988268) line 63
<SmallPileofGibs>	GTK-1.3! 006e3eba()
<SmallPileofGibs>	00010fcc()
<SmallPileofGibs>	014a2ca0()
<SmallPileofGibs>	$$$00001() line 79 <-- chkstk.asm.. stack overflow 
detecting thingy?
<SmallPileofGibs>	XYWnd::XY_Draw() line 2875 <-- just after DrawPathLines
<SmallPileofGibs>	ok, i crashed it in BC
<SmallPileofGibs>	what should i be looking for?
*** Equim-q3 is now known as Equim
[TTimo]	I cleaned up some dirty stuff
[TTimo]	well that's easy
[TTimo]	break in XY_Draw
[TTimo]	watch the stack
[TTimo]	put a static
[TTimo]	and break after a given number of calls
[TTimo]	it's probably in a situation where it's infinite looping
<SmallPileofGibs>	the stack would normally show a long list of calls 
<SmallPileofGibs>	hrm
<SmallPileofGibs>	i spose it doesn't ncessarily recurse
[TTimo]	long, but never growing infinitely
[TTimo]	if it stack overflows
[TTimo]	then it's probably recursing
*** neo279 (Lister279@du-006-0055.freeuk.com) has joined #gtkradiant
<SmallPileofGibs>	well, when i caused infinite recursion and got stack 
overflows, i had a really big stack =)
<SmallPileofGibs>	but this shows a small stack
[TTimo]	the trick is to catch it inside the recursion
<SmallPileofGibs>	how can you have a stack overflow with only 8 calls in 
the stack?
[TTimo]	if you just put a break it will beak on the first
[TTimo]	break even
[TTimo]	you can't catch recursion errors with debug breaks
<SmallPileofGibs>	but... this function is called thousands of times with 
no problem
[TTimo]	use a static
<SmallPileofGibs>	and it just decided to crash after a certain number of 
<SmallPileofGibs>	a static?
<leaf>	a static is being a prick as usual
<SmallPileofGibs>	ok leaf
[TTimo]	I'll look now
<SmallPileofGibs>	actually, mouse dragging just causes a large number of 
calls to expose()
<SmallPileofGibs>	which updates the windows
<SmallPileofGibs>	so perhaps the number of window updates is the problem
[TTimo]	crashed MSDev
<SmallPileofGibs>	ouch
[TTimo]	ok that was a bad crash
[TTimo]	it fucked a bunch of things
*** ^Fishman (blah@ has joined #gtkradiant
*** Mode change [+o ^Fishman] on #gtkradiant by ChanServ
<SmallPileofGibs>	=/
[TTimo]	hey ^Fishman
<leaf>	^Fishman is probably with Doom 3, but that's just a desktop beside the 
pic of doom its just loading a map
<^Fishman>	hey TTimo
<^Fishman>	leaf, forget ^Fishman
<leaf>	^Fishman: I forgot ^fishman
[TTimo]	I still can't reproduce anything with that bug
[TTimo]	you use one brush or more?
*** Equim (equim@host213-122-145-16.btinternet.com) has left IRC [Excess Idle]
*** neo279 is now known as MP5
*** MP5 is now known as neo279
[TTimo]	I'm not getting any sign of recursion .. I can't reproduce the bug 
either so I guess that's expected
*** neo279 (Lister279@du-006-0055.freeuk.com) has left IRC []
[TTimo]	http://www.gtkradiant.com/test/q3radiant_rectst.zip
[TTimo]	spog can you grab this build and try to reproduce the crash on it?
[TTimo]	tell me if it starts printing error messages about recursion
<SmallPileofGibs>	ok
<SmallPileofGibs>	TTimo: sometimes it never happens
<SmallPileofGibs>	others it happens with no brushes
<SmallPileofGibs>	it's wierd.. i can usually reproduce it really easily
<SmallPileofGibs>	but last night i couldn't
[TTimo]	I was never able to reproduce it
<SmallPileofGibs>	yep, just reproduced it
<SmallPileofGibs>	what did you do when you were trying to reproduce it?
[TTimo]	does it send out recursion messages?
<SmallPileofGibs>	none
[TTimo]	<SmallPileofGibs>	$$$00001() line 79
[TTimo]	<SmallPileofGibs>	XYWnd::XY_Draw() line 2875
[TTimo]	<SmallPileofGibs>	XYWnd::OnExpose() line 3228
[TTimo]	<SmallPileofGibs>	expose(_GtkWidget * 0x0149e090, _GdkEventExpose 
* 0x0003720c, void * 0x03988268) line 63
[TTimo]	<SmallPileofGibs>	GTK-1.3! 006e3eba()
[TTimo]	<SmallPileofGibs>	00010fcc()
[TTimo]	<SmallPileofGibs>	014a2ca0()
[TTimo]	<SmallPileofGibs>	$$$00001() line 79 <-- chkstk.asm.. stack 
overflow detecting thingy?
[TTimo]	<SmallPileofGibs>	XYWnd::XY_Draw() line 2875 <-- just after 
[TTimo]	if that really happens then it WILL output a recursion error msg
<SmallPileofGibs>	it says.. "The exception unknown software exception 
(0xc00000fd) occurred in the application at location 0x00512c37
<SmallPileofGibs>	"
<SmallPileofGibs>	hmm.. it doesn't look to me as if it's being caused by 
[TTimo]	the stack trace you pasted shows a recursion though
<SmallPileofGibs>	oh.. sorry
<SmallPileofGibs>	how can you tell? =)
[TTimo]	and if that was happening the build I sent would tell you
[TTimo]	and you said you can't reproduce with the RC2 binary?
<SmallPileofGibs>	it gives a message in msdev?
[TTimo]	no in GtkRad console
<SmallPileofGibs>	i looked in the console.. it said nothing
<SmallPileofGibs>	i'll download the RC2 installer now
[TTimo]	you said you had an earlier build on which you could not reproduce
<SmallPileofGibs>	i couldn't reproduce with RC1 the other night
[TTimo]	ah
<SmallPileofGibs>	but then i tried today and i could
<SmallPileofGibs>	and also on a build of RC2 from cvs today
<SmallPileofGibs>	i could
[TTimo]	yeah
[TTimo]	you can reproduce when it's running against Gtk libs you built yourself
<SmallPileofGibs>	hmm.. lemme check
<SmallPileofGibs>	i'll confirm with RC2
[TTimo]	both the linking and the running matter
[TTimo]	ok I'll let go on this bug and look at something else for now