[Forensics-changes] [yara] 225/415: Fix bug reported by @msuvajac and other issues relating to TSL finalization

Hilko Bengen bengen at moszumanska.debian.org
Thu Apr 3 05:43:08 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch debian
in repository yara.

commit 4e58b940bd4d4e3157dfd13c86f2628bbe13bc56
Author: Victor M. Alvarez <plusvic at gmail.com>
Date:   Fri Nov 15 13:51:55 2013 +0000

    Fix bug reported by @msuvajac and other issues relating to TSL finalization
---
 libyara/Makefile.am |  2 +-
 libyara/libyara.c   | 37 ++++++++++++++++++++++++++++++++++++-
 libyara/re.c        | 31 +++++++++++++++++++++++++++++++
 libyara/re.h        |  2 ++
 libyara/yara.h      |  3 +++
 5 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/libyara/Makefile.am b/libyara/Makefile.am
index 09eefbc..b345962 100644
--- a/libyara/Makefile.am
+++ b/libyara/Makefile.am
@@ -1,6 +1,6 @@
 AM_YFLAGS=-d
 
-AM_CFLAGS=-g -O4 -std=gnu99
+AM_CFLAGS=-g -O0 -std=gnu99
 
 ACLOCAL_AMFLAGS=-I m4
 
diff --git a/libyara/libyara.c b/libyara/libyara.c
index 8074ea4..019b8fc 100644
--- a/libyara/libyara.c
+++ b/libyara/libyara.c
@@ -40,6 +40,13 @@ pthread_key_t key;
 #endif
 
 
+//
+// yr_initialize
+//
+// Should be called by main thread before using any other
+// function from libyara.
+//
+
 void yr_initialize(void)
 {
   int i;
@@ -56,13 +63,41 @@ void yr_initialize(void)
   #endif
 
   yr_re_initialize();
+}
+
 
+//
+// yr_finalize_thread
+//
+// Should be called by ALL threads using libyara before exiting.
+//
+
+void yr_finalize_thread(void)
+{
+  yr_re_finalize_thread();
 }
 
+
+//
+// yr_finalize
+//
+// Should be called by main thread before exiting. Main thread doesn't
+// need to explicitely call yr_finalize_thread because yr_finalize already
+// calls it.
+//
+
 void yr_finalize(void)
 {
-  yr_heap_free();
+  yr_re_finalize_thread();
+
+  #ifdef WIN32
+  TlsFree(key);
+  #else
+  pthread_key_delete(key);
+  #endif
+
   yr_re_finalize();
+  yr_heap_free();
 }
 
 //
diff --git a/libyara/re.c b/libyara/re.c
index a2e1eed..6165f5d 100644
--- a/libyara/re.c
+++ b/libyara/re.c
@@ -123,6 +123,13 @@ extern int yr_parse_hex_string(
   RE** re);
 
 
+//
+// yr_re_initialize
+//
+// Should be called by main thread before any other
+// function from this module.
+//
+
 int yr_re_initialize()
 {
   #ifdef WIN32
@@ -134,9 +141,33 @@ int yr_re_initialize()
   return ERROR_SUCCESS;
 }
 
+//
+// yr_re_finalize
+//
+// Should be called by main thread after every other thread
+// stopped using functions from this module.
+//
 
 int yr_re_finalize()
 {
+  #ifdef WIN32
+  TlsFree(thread_storage_key);
+  #else
+  pthread_key_delete(thread_storage_key);
+  #endif
+
+  return ERROR_SUCCESS;
+}
+
+//
+// yr_re_finalize_thread
+//
+// Should be called by every thread using this module
+// before exiting.
+//
+
+int yr_re_finalize_thread()
+{
   RE_THREAD_STORAGE* thread_storage;
 
   #ifdef WIN32
diff --git a/libyara/re.h b/libyara/re.h
index 037172d..72d2519 100644
--- a/libyara/re.h
+++ b/libyara/re.h
@@ -168,4 +168,6 @@ int yr_re_initialize();
 
 int yr_re_finalize();
 
+int yr_re_finalize_thread();
+
 #endif
diff --git a/libyara/yara.h b/libyara/yara.h
index 0499a71..ada8645 100644
--- a/libyara/yara.h
+++ b/libyara/yara.h
@@ -566,6 +566,9 @@ void yr_initialize(void);
 void yr_finalize(void);
 
 
+void yr_finalize_thread(void);
+
+
 int yr_get_tidx(void);
 
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git



More information about the forensics-changes mailing list