diff options
author | Werner Koch <[email protected]> | 2014-08-25 14:33:09 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2014-08-25 14:37:46 +0000 |
commit | fc651665010056e6184e8514e5c5436427d7052d (patch) | |
tree | 08156e7155986a560c06812748090d64bc654017 /src/posix-lock.c | |
parent | Remove GnuPG specific code. (diff) | |
download | libgpg-error-fc651665010056e6184e8514e5c5436427d7052d.tar.gz libgpg-error-fc651665010056e6184e8514e5c5436427d7052d.zip |
Replace locking code in estream functions.
* src/posix-lock.c: Add weak program for pthread_mutex_trylock.
(_gpgrt_lock_trylock): New.
* src/w32-lock.c (_gpgrt_lock_init): Add missing return statement.
(_gpgrt_lock_trylock): New.
* src/visibility.c (gpgrt_set_syscall_clamp): New.
(gpgrt_lock_trylock): New.
(gpgrt_vsnprintf): Fix symbol name.
* src/init.c (DllMain): Mark unused arg.
* src/estream.c: Replace npth mutexes by our own locks. Replace yeild
macro by _gpgrt_yield.
(pre_syscall_func, post_syscall_func): New.
(do_deinit): Clear both new vars.
(es_func_fd_read, es_func_fd_write): Call pre and post syscall
functions instead of the former SYSCALL macros.
(es_func_w32_read, es_func_w32_write): Ditto.
(es_func_fd_seek, es_func_w32_seek, es_func_fp_read)
(es_func_fp_write, es_func_fp_seek, es_func_fp_destroy): Bracket
syscalls with the pre- and post-syscall fucntions.
(do_npth_read, do_npth_write): Remove.
(_gpgrt_es_init): Remove call to mutex init. It is now statically
initialized.
(_gpgrt_set_syscall_clamp): New.
(es_create): Destroy stream lock on error.
(do_close): Destroy stream lock.
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); |