diff options
Diffstat (limited to 'src/posix-lock.c')
-rw-r--r-- | src/posix-lock.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/posix-lock.c b/src/posix-lock.c index 363cc09..5b0cab5 100644 --- a/src/posix-lock.c +++ b/src/posix-lock.c @@ -116,9 +116,21 @@ get_lock_object (gpgrt_lock_t *lockhd) gpg_err_code_t gpgrt_lock_init (gpgrt_lock_t *lockhd) { - _gpgrt_lock_t *lock = get_lock_object (lockhd); + _gpgrt_lock_t *lock = (_gpgrt_lock_t*)lockhd; int rc; + /* If VERS is zero we assume that no static initialization has been + done, so we setup our ABI version right here. The caller might + have called us to test whether lock support is at all available. */ + if (!lock->vers) + { + if (sizeof (gpgrt_lock_t) < sizeof (_gpgrt_lock_t)) + abort (); + lock->vers = LOCK_ABI_VERSION; + } + else /* Run the usual check. */ + lock = get_lock_object (lockhd); + #if USE_POSIX_THREADS if (use_pthread_p()) { @@ -198,7 +210,7 @@ gpgrt_lock_destroy (gpgrt_lock_t *lockhd) rc = gpg_err_code_from_errno (rc); else { - /* Re-init the the mutex so that it can be re-used. */ + /* Re-init the mutex so that it can be re-used. */ gpgrt_lock_t tmp = GPGRT_LOCK_INITIALIZER; memcpy (lockhd, &tmp, sizeof tmp); } |