Mark Wedel wrote:
I'd personally suggest cleaning that 'if' statement at all possible -
break it into smaller pieces or something.
Anyways, hard to know exactly the logic of the if statement. But
looking at the core files, and at the statements, that big problem I
see is that you are looking at owner->contr->... without knowing in
fact that owner->contr is in fact valid.
owner does not have to be a player, and looking at the two crashes,
in fact, owner is not a player, but a Balrog. I'd also be wary of any
other ->contr checks here, unless you really know 100% sure that they
are valid. The if statement is too complex for me to see that at a
glance if the checks are there.
The other problem with such complex if statements is that the crash
point is really 'someplace' in that statement - breaking it in smaller
pieces gives you a bit finer control.
The cleanest thing is if you can do some basic checks like:
if (simpler expression) continue;
if (other simpler expression) continue;
...
and then perhaps the if statement that is executed could perhaps be
readable.
Ok, because I've used the same logic block in a couple places I've
separated into a separate function, and I've now split it into many if
statements and such which should be much much more readable. I've also
added many safeguards in the process that should get rid of the bug that
caused the crash on metalforge and should hopefully prevent other
similar bugs from cropping up (including some sanity checks that would
indicate bugs in other places if they end up being triggered). I've
tested this update and committed it to CVS. It isn't necessary, but it
would be convenient if metalforge was updated to the latest CVS
including this for more extensive testing before the upcoming release.
Thanks,
Alex Schultz
_______________________________________________
crossfire mailing list
[email protected]
http://mailman.metalforge.org/mailman/listinfo/crossfire