aboutsummaryrefslogtreecommitdiffstats
path: root/src/posix-lock.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-08-25 14:33:09 +0000
committerWerner Koch <[email protected]>2014-08-25 14:37:46 +0000
commitfc651665010056e6184e8514e5c5436427d7052d (patch)
tree08156e7155986a560c06812748090d64bc654017 /src/posix-lock.c
parentRemove GnuPG specific code. (diff)
downloadlibgpg-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.c24
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);