diff options
Diffstat (limited to 'e-util')
-rw-r--r-- | e-util/ChangeLog | 8 | ||||
-rw-r--r-- | e-util/e-msgport.c | 28 |
2 files changed, 24 insertions, 12 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 131bbf4cba..8c40628977 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,11 @@ +2003-08-11 Not Zed <NotZed@Ximian.com> + + * e-msgport.c (e_thread_put): check pthread_create return code + properly. + (e_mutex_lock): check pthread* return codes properly. + (e_mutex_unlock): Same here. + (e_mutex_cond_wait): and here. + 2003-08-05 Dan Winship <danw@ximian.com> * e-html-utils.c (special_chars): add a flag for non-url chars diff --git a/e-util/e-msgport.c b/e-util/e-msgport.c index 03c12c8847..36ea6cfe8d 100644 --- a/e-util/e-msgport.c +++ b/e-util/e-msgport.c @@ -766,8 +766,10 @@ void e_thread_put(EThread *e, EMsg *msg) /* create the thread, if there is none to receive it yet */ if (e->id == E_THREAD_NONE) { - if (pthread_create(&e->id, NULL, thread_dispatch, e) == -1) { - g_warning("Could not create dispatcher thread, message queued?: %s", strerror(errno)); + int err; + + if ((err = pthread_create(&e->id, NULL, thread_dispatch, e)) != 0) { + g_warning("Could not create dispatcher thread, message queued?: %s", strerror(err)); e->id = E_THREAD_NONE; } } @@ -845,14 +847,15 @@ int e_mutex_destroy(EMutex *m) int e_mutex_lock(EMutex *m) { pthread_t id; + int err; switch (m->type) { case E_MUTEX_SIMPLE: return pthread_mutex_lock(&m->mutex); case E_MUTEX_REC: id = pthread_self(); - if (pthread_mutex_lock(&m->mutex) == -1) - return -1; + if ((err = pthread_mutex_lock(&m->mutex)) != 0) + return err; while (1) { if (m->owner == E_THREAD_NONE) { m->owner = id; @@ -863,26 +866,27 @@ int e_mutex_lock(EMutex *m) break; } else { m->waiters++; - if (pthread_cond_wait(&m->cond, &m->mutex) == -1) - return -1; + if ((err = pthread_cond_wait(&m->cond, &m->mutex)) != 0) + return err; m->waiters--; } } return pthread_mutex_unlock(&m->mutex); } - errno = EINVAL; - return -1; + return EINVAL; } int e_mutex_unlock(EMutex *m) { + int err; + switch (m->type) { case E_MUTEX_SIMPLE: return pthread_mutex_unlock(&m->mutex); case E_MUTEX_REC: - if (pthread_mutex_lock(&m->mutex) == -1) - return -1; + if ((err = pthread_mutex_lock(&m->mutex)) != 0) + return err; g_assert(m->owner == pthread_self()); m->depth--; @@ -915,8 +919,8 @@ int e_mutex_cond_wait(void *vcond, EMutex *m) case E_MUTEX_SIMPLE: return pthread_cond_wait(cond, &m->mutex); case E_MUTEX_REC: - if (pthread_mutex_lock(&m->mutex) == -1) - return -1; + if ((ret = pthread_mutex_lock(&m->mutex)) != 0) + return ret; g_assert(m->owner == pthread_self()); ret = pthread_cond_wait(cond, &m->mutex); g_assert(m->owner == pthread_self()); |