From f93804a685b51e2d724847d071d47c173c2c0ee6 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 3 May 2000 22:00:00 +0000 Subject: [PATCH] Reference counter (if multiple modules are init/freeing nmem). --- util/nmem.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/util/nmem.c b/util/nmem.c index 59e2282..a9646fb 100644 --- a/util/nmem.c +++ b/util/nmem.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: nmem.c,v $ - * Revision 1.21 2000-02-29 13:44:55 adam + * Revision 1.22 2000-05-03 22:00:00 adam + * Reference counter (if multiple modules are init/freeing nmem). + * + * Revision 1.21 2000/02/29 13:44:55 adam * Check for config.h (currently not generated). * * Revision 1.20 2000/01/06 14:59:13 adam @@ -370,33 +373,37 @@ void nmem_critical_leave (void) void nmem_init (void) { - nmem_init_flag = 1; + if (++nmem_init_flag == 1) + { #ifdef WIN32 - InitializeCriticalSection(&critical_section); + InitializeCriticalSection(&critical_section); #endif - nmem_active_no = 0; - freelist = NULL; - cfreelist = NULL; + nmem_active_no = 0; + freelist = NULL; + cfreelist = NULL; + } } void nmem_exit (void) { - while (freelist) + if (--nmem_init_flag == 0) { - struct nmem_block *fl = freelist; - freelist = freelist->next; - xfree (fl->buf); - xfree (fl); - } - while (cfreelist) - { - struct nmem_control *cfl = cfreelist; - cfreelist = cfreelist->next; - xfree (cfl); - } - nmem_init_flag = 0; + while (freelist) + { + struct nmem_block *fl = freelist; + freelist = freelist->next; + xfree (fl->buf); + xfree (fl); + } + while (cfreelist) + { + struct nmem_control *cfl = cfreelist; + cfreelist = cfreelist->next; + xfree (cfl); + } #ifdef WIN32 - DeleteCriticalSection(&critical_section); + DeleteCriticalSection(&critical_section); #endif + } } -- 1.7.10.4