It never works out. I usually even warn myself about it (by writing comments to myself),
but it still catches me out. I also usually give myself a todo item like "hmm this smells funny revisit it",
but of course the todos just pile up in a never-ending heap, and little old ones like that get burried.
void DoLZDecompress(const char *filename,...)
{
struct CommandInfo i;
i.data = (void *)filename;
// warning : passing string pointer (not copying) to another thread, make sure it's const / sticks around!
StartJob( &i );
}
Yup, that's a crash.
void OodleIOQ_SetKickImmediate( bool kick );
/* kick state is global ; hmm should really be per-thread ; makes it a race
*/
Yup, that's a problem, which leads to the later deadlock :
void Oodle_Wait( Handle h )
{
// @@ ? can this handle depend on un-kicked items, and hence never complete ?
// I used to check for that with normal deps but it's hard now with the "permits"
...
}
Coding crime doesn't pay. Spaghetti always gets you in the end, with its buggy staining sauce.
Whenever I have one of those "hmm this smells funny, I'm worried about the robustness of this" , yep,
it's a problem.
One of my mortal enemies are the "don't worry about it, it'll be fine" people. No it will fucking not
be fine. You know what will happen? It'll be a nasty god damn race bug, which I will wind up fixing
while the "don't worry about it, it'll be fine" guy is watching lolcatz or browsing facebook.
"02-18-13 - Don't write spaghetti"
No comments yet. -