[ros-dev] Re: [ros-svn] [gdalsnes] 18113: -reorder
InsertXscendingOrder macro argument order and update uses
Gunnar Dalsnes
hardon at online.no
Tue Sep 27 21:02:35 CEST 2005
Alex Ionescu wrote:
> Gunnar Dalsnes wrote:
>
>> If Alex doesnt like it ill revert it in the files that he "own", but
>> this "i own the code" stuff has gone too far.
>
>
> It's not about "owning". Call it "maintaining" if you want, like Steven
> said. And it's not "Alex" doesn't like it, it's erm, Alex, Steven,
> Thomas, Casper, Hartmut and probably others.
> I'll go in more detail on
> the technical reason why, at least for me, the macros are unacceptable.
> (Other then the fact that macros in the programming world are considered
> to be as bad as goto.) Here's something I can do that your macros remove:
>
> HeadList = &Foo.Flink
> DPRINT1("List head at: %p\n", HeadList);
> Entry = HeadList->Flink;
> DPRINT1("Entry at: %p\n", Entry);
> while (Entry != HeadList)
> {
> DPRINT1("Getting object\n");
> Object = CONTAINING_RECORD(Entry, OBJECT, Link);
> DPRINT1("Got the object: %p\n", Object);
> <.... do stuff>
>
> DPRINT1("About to remove entry from list\n");
> RemoveEntryList(&Object->Link);
>
> DPRINT1("Entry removed, moving to: %p\n", Entry->Flink);
> Entry = Entry->Flink;
> }
If you come across a crash during an enum you just temporarily change
the code to hunt the bug, just like normal bug hunting. Some of the list
enums i changed were on this form...
for (HeadList = &Foo.Flink; Entry != HeadList; Entry = Entry->Flink)
{
Object = CONTAINING_RECORD(Entry, OBJECT, Link);
Object->stuff
}
...and if you had to "debug" it like you showed youd had to edit the
code just as well. But for normal not-in-process-of-being-debugged-code
i think the above code sux (even without the dprints).
>
> In the current state that ReactOS + the kernel + debugging facilities
> are, that is sometimes the only way to find out what's crashing during a
> list .
>
>>
>> Any person can see that those macros produce much cleaner code, and
>> without any measureable performance loss. And the stuff with "macros
>> screw my debugging", all list manipulation functions are already macros.
>
>
> No they're not. They're inlined functions. And they do
> insertion/removal, not parsing lists. See above why parsing should be
> expanded.
Yeah, i see now they are inlined in latest DDKs...
>
More information about the Ros-dev
mailing list