* fixed SIGSEGV reported by Cedric Krier <ced@ced.homedns.org>
authorBernd Petrovitsch <bernd@firmix.at>
Tue, 31 Jul 2007 12:02:18 +0000 (12:02 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Tue, 31 Jul 2007 12:02:18 +0000 (12:02 +0000)
CHANGELOG
lib/bmf/src/Bmf.c

index a16b3ca..b6759bd 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,5 @@
 This file states changes as of version 0.2.4:
-$Id: CHANGELOG,v 1.67 2007/07/28 13:45:29 bernd67 Exp $
+$Id: CHANGELOG,v 1.68 2007/07/31 12:02:18 bernd67 Exp $
 
 0.5.3 ---------------------------------------------------------------------
 
@@ -7,6 +7,12 @@ URGENT BUG FIX
 Ignacio García Pérez <iggarpe@terra.es> found a serious bug in the dot-draw
 plugin and identified it's source.
 
+BUG FIX
+The bmf plugin wanted to kill a not-started thread and this causes a segmentation
+violation. This happens if the old plugin interface support is not compiled in
+and one uses - or more asccurate: wants to use - the bmf plugin which uses that
+ATM. Thanks to Cedric Krier <ced@ced.homedns.org> for reporting this.
+
 DEPENDENCIES FIXED
 The dependencies (*.d files) are now properly generated and used. Nd they also
 dependen on the Makefile in the current directory and the Makefile.inc so that
index 103cda9..5110230 100644 (file)
@@ -1451,19 +1451,22 @@ void CloseBmf(void)
     RestoreSpoofFilter();
   }
 
-  /* Signal BmfThread to exit */
-  /* Strangely enough, all running threads receive the SIGALRM signal. But only the
-   * BMF thread is affected by this signal, having specified a handler for this
-   * signal in its thread entry function BmfRun(...). */
-  if (pthread_kill(BmfThread, SIGALRM) != 0)
+  if (BmfThreadRunning)
   {
-    BmfPError("pthread_kill() error");
-  }
+    /* Signal BmfThread to exit */
+    /* Strangely enough, all running threads receive the SIGALRM signal. But only the
+     * BMF thread is affected by this signal, having specified a handler for this
+     * signal in its thread entry function BmfRun(...). */
+    if (pthread_kill(BmfThread, SIGALRM) != 0)
+    {
+      BmfPError("pthread_kill() error");
+    }
 
-  /* Wait for BmfThread to acknowledge */
-  if (pthread_join(BmfThread, NULL) != 0)
-  {
-    BmfPError("pthread_join() error");
+    /* Wait for BmfThread to acknowledge */
+    if (pthread_join(BmfThread, NULL) != 0)
+    {
+      BmfPError("pthread_join() error");
+    }
   }
 
   /* Clean up after the BmfThread has been killed */