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.
No comments:
Post a Comment