diff options
Diffstat (limited to 'src/posix-lock.c')
-rw-r--r-- | src/posix-lock.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/posix-lock.c b/src/posix-lock.c index 22bb734..7f20347 100644 --- a/src/posix-lock.c +++ b/src/posix-lock.c @@ -52,6 +52,7 @@ # pragma weak pthread_cancel # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_trylock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # if ! PTHREAD_IN_USE_DETECTION_HARD @@ -172,6 +173,29 @@ _gpgrt_lock_lock (gpgrt_lock_t *lockhd) gpg_err_code_t +_gpgrt_lock_trylock (gpgrt_lock_t *lockhd) +{ + _gpgrt_lock_t *lock = get_lock_object (lockhd); + int rc; + +#if USE_POSIX_THREADS + if (use_pthread_p()) + { + rc = pthread_mutex_trylock (&lock->u.mtx); + if (rc) + rc = gpg_err_code_from_errno (rc); + } + else + rc = 0; /* Threads are not used. */ +#else /* Unknown thread system. */ + rc = GPG_ERR_NOT_IMPLEMENTED; +#endif /* Unknown thread system. */ + + return rc; +} + + +gpg_err_code_t _gpgrt_lock_unlock (gpgrt_lock_t *lockhd) { _gpgrt_lock_t *lock = get_lock_object (lockhd); |