23.10.08

Today is a good day!

There is one thing, which kept me annoying over quite some time. This random crash of e-uae with gtk-mui GUI. At startup, it crashed at a time, where nothing wrong was happening. If you changed build options, it crashed somewehere else. Sometimes it did only crash at 10% of all starts, sometimes at 100%. This was the case after my last changes.

But at least, the crash was now "stable" and reproduceable. Bad thing, if I change anything, it might get random again. But this did not happen luckily.

So I found out, this time the crash happens, if I access the mui object of this GtkCombo object. This mui object works at creation time and at many other occasions, but after many hundreds of code lines, it causes a crash, as soon as it is accessed. Something overwrites it in between.

So I tried to debug with gdb, but I had no luck with watch points. If I attach it to a running aros, I don't have 'findaddr'? If I avoid all that problems, there is no way, to continue aros execution after setting a watch point, maybe I am too stupid for that ;).

So I wrote a small function check_combo, which just accesses the mui object of that GtkCombo widget. i placed that check everywhere and so I could reduce the amount of lines to search to just some 15 lines. classes/clist.c in gtk-mui. But there was nothing wrong:


static ULONG mNew(struct IClass *cl, APTR obj, Msg msg) {
GtkWidget *widget;
struct TagItem *tstate, *tag;
GString *t;
ULONG columns;
ULONG i;
GETDATA;

obj = (APTR)DoSuperMethodA(cl, obj, msg);

if(!obj) {
ErrOut("clist: unable to create object!");
return (ULONG) NULL;
}

[..code snipped ..]

data->list=NListObject,
ReadListFrame,
MUIA_NList_Format, (ULONG) data->format,
MUIA_NList_Title, TRUE,
MUIA_NList_DisplayHook, (ULONG) &hook_display,
End;


After NListObject, I could not access the GtkCombo object any more. Ok, but where is the problem. I started debugging NList class. Hmm. there was nothing suspicious.

But finally:

GETDATA is defined as
#define GETDATA struct Data *data = (struct Data *)INST_DATA(cl, obj)

And obj is not yet valid at that time. So I moved GETDATA after DoSuperMethod and it worked. I don't want to count the hours I spent on that error.

And as you where so brave to read it all, you might try out the current version of e-uae WIP4 with gtk-mui. get it from here. It's just the gzipped e-uae binary, put in in aros and run it. Should work ;).

You can now even remove floppies during boot time:

2 Comments:

Blogger mmartinka said...

run the very good. thanks

3:18 PM  
Anonymous Anonymous said...

Congrats! =o)

12:02 AM  

Post a Comment

<< Home