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