aboutsummaryrefslogtreecommitdiffstats
path: root/src/w32-lock.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/w32-lock.c')
-rw-r--r--src/w32-lock.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/w32-lock.c b/src/w32-lock.c
index 3aac1ae..8c086f9 100644
--- a/src/w32-lock.c
+++ b/src/w32-lock.c
@@ -72,6 +72,7 @@ _gpgrt_lock_init (gpgrt_lock_t *lockhd)
InitializeCriticalSection (&lock->csec);
lock->initdone = 1;
+ return 0;
}
@@ -106,6 +107,30 @@ _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);
+
+ if (!lock->initdone)
+ {
+ if (!InterlockedIncrement (&lock->started))
+ {
+ gpgrt_lock_init (lockhd);
+ }
+ else
+ {
+ while (!lock->initdone)
+ Sleep (0);
+ }
+ }
+
+ if (!TryEnterCriticalSection (&lock->csec))
+ return GPG_ERR_EBUSY;
+ return 0;
+}
+
+
+gpg_err_code_t
_gpgrt_lock_unlock (gpgrt_lock_t *lockhd)
{
_gpgrt_lock_t *lock = get_lock_object (lockhd);