POSIX threads don't use errno to report errors

Fix simple_semaphore to follow POSIX threads convention for reporting
errors.
This commit is contained in:
Martin Hurton 2009-08-31 11:31:32 +02:00
parent 72fdf47d16
commit 0aacee389f
2 changed files with 11 additions and 10 deletions

View File

@ -22,6 +22,7 @@
#include <assert.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
@ -81,10 +82,10 @@ namespace zmq
}} while (false)
// Provides convenient way to check for POSIX errors.
#define posix_assert(x) do {\
fprintf (stderr, "%s (%s:%d)\n", strerror (x), __FILE__, __LINE__);\
abort ();\
} while (false)
#define posix_assert(x) do { if ((x)) {\
fprintf (stderr, "%s (%s:%d)\n", strerror (x), __FILE__, __LINE__);\
abort ();\
}} while (false)
// Provides convenient way to check for errors from getaddrinfo.
#define gai_assert(x) do { if (x) {\

View File

@ -53,32 +53,32 @@ namespace zmq
inline simple_semaphore_t ()
{
int rc = pthread_mutex_init (&mutex, NULL);
errno_assert (rc == 0);
posix_assert (rc);
rc = pthread_mutex_lock (&mutex);
errno_assert (rc == 0);
posix_assert (rc);
}
// Destroy the semaphore.
inline ~simple_semaphore_t ()
{
int rc = pthread_mutex_unlock (&mutex);
errno_assert (rc == 0);
posix_assert (rc);
rc = pthread_mutex_destroy (&mutex);
errno_assert (rc == 0);
posix_assert (rc);
}
// Wait for the semaphore.
inline void wait ()
{
int rc = pthread_mutex_lock (&mutex);
errno_assert (rc == 0);
posix_assert (rc);
}
// Post the semaphore.
inline void post ()
{
int rc = pthread_mutex_unlock (&mutex);
errno_assert (rc == 0);
posix_assert (rc);
}
private: