4 ms·
Huh? You do realize that the standard assert() macro already is compiled out if NDEBUG is defined, right? Your code could just as well be written as asser
by unwind 12y ago
Huh? You do realize that the standard assert() macro already is compiled out if NDEBUG is defined, right?
Your code could just as well be written as
assert(pthread_mutex_unlock(&lock) == 0);
which of course has the added benefit of not inventing anything new, i.e. being standard and immediately understood by anyone who knows the language and its libraries reasonably well.
- baruch 12y agoBe very careful with that. When compiled under NDEBUG and the assert gone, the mutex unlock will be gone too and you'll wonder why the application stops working.
- screwt 12y agoAs per jacquesm's comment below[0], your example would, by default, be compiled out if NDEBUG is defined. So in production you'd never release the lock. [0] https://news.ycombinator.com/item?id=8206258 https://news.ycombinator.com/item?id=8206258
- quotemstr 12y agoYou're misreading the code. When NDEBUG is defined, we don't use assert, but instead always evaluate the expression. The overall effect is that we always evaluate VERIFY's argument, but only check it in debug builds.
- unwind 12y agoReplying to self since I can't edit: d'oh. Yes, I totally mis-read the original code. I should have relized why the other comment questioning this practice had been down-voted, heh. Of course not unlocking the mutex in non-debug builds would be a problem. Thanks, and sorry.