On Thu, 5 Nov 2009, Andrzej K. Haczewski wrote: > +static inline int pthread_cond_init(pthread_cond_t *cond, const void *unused) > +{ > + cond->waiters = 0; > + > + InitializeCriticalSection(&cond->waiters_lock); > + > + cond->sema = CreateSemaphore(NULL, 0, LONG_MAX, NULL); > + if (!cond->sema) > + return 0; /* POSIX do not allow pthread_cond_init to fail */ > + return 0; > +} Please use die("CreateSemaphore() failed") in the failure case instead of returning success. However, my pthread_cond_init man page says: [[[ RETURN VALUE If successful, the pthread_cond_destroy() and pthread_cond_init() func- tions shall return zero; otherwise, an error number shall be returned to indicate the error. The [EBUSY] and [EINVAL] error checks, if implemented, shall act as if they were performed immediately at the beginning of processing for the function and caused an error return prior to modifying the state of the condition variable specified by cond. ERRORS The pthread_cond_destroy() function may fail if: EBUSY The implementation has detected an attempt to destroy the object referenced by cond while it is referenced (for example, while being used in a pthread_cond_wait() or pthread_cond_timedwait()) by another thread. EINVAL The value specified by cond is invalid. The pthread_cond_init() function shall fail if: EAGAIN The system lacked the necessary resources (other than memory) to initialize another condition variable. ENOMEM Insufficient memory exists to initialize the condition variable. The pthread_cond_init() function may fail if: EBUSY The implementation has detected an attempt to reinitialize the object referenced by cond, a previously initialized, but not yet destroyed, condition variable. EINVAL The value specified by attr is invalid. ]]] I'm not advocating that you implement detailed error codes as we don't really care about specific errors. This is just to disagree with the "POSIX do not allow pthread_cond_init to fail" assertion. In any case, using die() to keep it simple is certainly better than blindly returning 0 on failure. However you could simply return ENOMEM and use the die() in init_threaded_search() instead. Nicolas -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html