Fix pthread locking and remove defunctional support for static lock init.
authorMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Tue, 3 Jan 2012 21:04:30 +0000 (22:04 +0100)
committerMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Tue, 3 Jan 2012 21:04:30 +0000 (22:04 +0100)
* src/ath.c: Include assert.h.
(ath_mutex_destroy, ath_mutex_lock, ath_mutex_unlock): Dereference LOCK.
* src/g10lib.h (_gcry_secmem_module_init): New declaration.
* src/global.c (global_init): Call _gcry_secmem_module_init.
* src/secmem.c (_gcry_secmem_module_init): New function.

src/ath.c
src/g10lib.h
src/global.c
src/secmem.c

index 4834a52..1363d9e 100644 (file)
--- a/src/ath.c
+++ b/src/ath.c
@@ -21,6 +21,7 @@
 #include <config.h>
 #endif
 
+#include <assert.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
 #endif
 
 /* For the dummy interface.  The MUTEX_NOTINIT value is used to check
-   that a mutex has been initialized.  Because its value is there is
-   no need to explicit initialized a mutex variable because it is
-   anyway static and we store a pointer to allocated memory there
-   after initialization.  The same thing works with other thread
-   models. */
+   that a mutex has been initialized.  */
 #define MUTEX_NOTINIT  ((ath_mutex_t) 0)
 #define MUTEX_UNLOCKED ((ath_mutex_t) 1)
 #define MUTEX_LOCKED   ((ath_mutex_t) 2)
@@ -231,7 +228,7 @@ ath_mutex_destroy (ath_mutex_t *lock)
 #if USE_POSIX_THREADS_WEAK
     case ath_model_pthreads_weak:
       {
-        pthread_mutex_t *plck = (pthread_mutex_t*)lock;
+        pthread_mutex_t *plck = (pthread_mutex_t*) (*lock);
 
         err = pthread_mutex_destroy (plck);
         if (!err)
@@ -263,7 +260,7 @@ ath_mutex_lock (ath_mutex_t *lock)
     {
     case ath_model_none:
       if (*lock == MUTEX_NOTINIT)
-        err = EINVAL;
+       err = EINVAL;
       else if (*lock == MUTEX_UNLOCKED)
         {
           *lock = MUTEX_LOCKED;
@@ -275,7 +272,7 @@ ath_mutex_lock (ath_mutex_t *lock)
 
 #if USE_POSIX_THREADS_WEAK
     case ath_model_pthreads_weak:
-      err = pthread_mutex_lock ((pthread_mutex_t*)lock);
+      err = pthread_mutex_lock ((pthread_mutex_t*)(*lock));
       break;
 #endif /*USE_POSIX_THREADS_WEAK*/
 
@@ -298,7 +295,7 @@ ath_mutex_unlock (ath_mutex_t *lock)
     {
     case ath_model_none:
       if (*lock == MUTEX_NOTINIT)
-        err = EINVAL;
+       err = EINVAL;
       else if (*lock == MUTEX_LOCKED)
         {
           *lock = MUTEX_UNLOCKED;
@@ -310,7 +307,7 @@ ath_mutex_unlock (ath_mutex_t *lock)
 
 #if USE_POSIX_THREADS_WEAK
     case ath_model_pthreads_weak:
-      err = pthread_mutex_unlock ((pthread_mutex_t*)lock);
+      err = pthread_mutex_unlock ((pthread_mutex_t*)(*lock));
       break;
 #endif /*USE_POSIX_THREADS_WEAK*/
 
index f468ac4..93652ed 100644 (file)
@@ -302,6 +302,7 @@ gcry_err_code_t _gcry_module_list (gcry_module_t modules,
 gcry_err_code_t _gcry_cipher_init (void);
 gcry_err_code_t _gcry_md_init (void);
 gcry_err_code_t _gcry_pk_init (void);
+gcry_err_code_t _gcry_secmem_module_init ();
 
 gcry_err_code_t _gcry_pk_module_lookup (int id, gcry_module_t *module);
 void _gcry_pk_module_release (gcry_module_t module);
index 36d6646..bde8791 100644 (file)
@@ -131,6 +131,9 @@ global_init (void)
   err = _gcry_primegen_init ();
   if (err)
     goto fail;
+  err = _gcry_secmem_module_init ();
+  if (err)
+    goto fail;
 
   return;
 
index 2beb234..107c662 100644 (file)
@@ -506,6 +506,19 @@ _gcry_secmem_init (size_t n)
 }
 
 
+gcry_err_code_t
+_gcry_secmem_module_init ()
+{
+  int err;
+
+  err = ath_mutex_init (&secmem_lock);
+  if (err)
+    log_fatal ("could not allocate secmem lock\n");
+
+  return 0;
+}
+
+
 static void *
 _gcry_secmem_malloc_internal (size_t size)
 {