diff options
Diffstat (limited to 'src/w32-lock.c')
-rw-r--r-- | src/w32-lock.c | 25 |
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); |