Jelajahi Sumber

Make the random number initialize/terminate reference counted but still not thread safe

mingodad 8 tahun lalu
induk
melakukan
2156a2bfe2
1 mengubah file dengan 7 tambahan dan 3 penghapusan
  1. 7 3
      myaxtls/crypto_misc.c

+ 7 - 3
myaxtls/crypto_misc.c

@@ -106,7 +106,11 @@ int get_file(const char *filename, uint8_t **buf)
  */
 EXP_FUNC void STDCALL RNG_initialize()
 {
-    if(rng_started) return;
+    if(rng_started)
+    {
+        ++rng_started;
+        return;
+    }
 #if !defined(WIN32) && defined(CONFIG_USE_DEV_URANDOM)
     rng_fd = ax_open("/dev/urandom", O_RDONLY);
 #elif defined(WIN32) && defined(CONFIG_WIN32_USE_CRYPTO_LIB)
@@ -155,13 +159,13 @@ EXP_FUNC void STDCALL RNG_custom_init(const uint8_t *seed_buf, int size)
  */
 EXP_FUNC void STDCALL RNG_terminate(void)
 {
-    if(!rng_started) return;
+    if(rng_started == 0) return;
+    if(--rng_started) return;
 #ifndef WIN32
     close(rng_fd);
 #elif defined(CONFIG_WIN32_USE_CRYPTO_LIB)
     CryptReleaseContext(gCryptProv, 0);
 #endif
-	rng_started = 0;
 }
 
 /**