fix memory leak in memory debuggin code ...
authorBodo Möller <bodo@openssl.org>
Mon, 18 Nov 2002 14:00:42 +0000 (14:00 +0000)
committerBodo Möller <bodo@openssl.org>
Mon, 18 Nov 2002 14:00:42 +0000 (14:00 +0000)
Submitted by: Nils Larsch

crypto/mem_dbg.c

index 0c1855afb1420b5ca14ce62669ef8188523d2781..57bd08f65d92c50b87699065d2fb43eeb5f7b428 100644 (file)
@@ -102,6 +102,8 @@ typedef struct app_mem_info_st
        int references;
        } APP_INFO;
 
+static void app_info_free(APP_INFO *);
+
 static LHASH *amih=NULL; /* hash-table with those app_mem_info_st's
                           * that are at the top of their thread's stack
                           * (with `thread' as key);
@@ -140,6 +142,18 @@ static unsigned long disabling_thread = 0; /* Valid iff num_disable > 0.
                                             * thread named in disabling_thread).
                                             */
 
+static void app_info_free(APP_INFO *inf)
+       {
+       if (--(inf->references) <= 0)
+               {
+               if (inf->next != NULL)
+                       {
+                       app_info_free(inf->next);
+                       }
+               OPENSSL_free(inf);
+               }
+       }
+
 int CRYPTO_mem_ctrl(int mode)
        {
        int ret=mh_mode;
@@ -502,9 +516,7 @@ void CRYPTO_dbg_free(void *addr, int before_p)
                                mp->order, mp->addr, mp->num);
 #endif
                                if (mp->app_info != NULL)
-                                       {
-                                       mp->app_info->references--;
-                                       }
+                                       app_info_free(mp->app_info);
                                OPENSSL_free(mp);
                                }