* profiler.c (sigprof_handler): Fix race condition.
authorTomohiro Matsuyama <tomo@cx4a.org>
Fri, 28 Sep 2012 09:34:20 +0000 (18:34 +0900)
committerTomohiro Matsuyama <tomo@cx4a.org>
Fri, 28 Sep 2012 09:34:20 +0000 (18:34 +0900)
src/ChangeLog
src/profiler.c

index 601c72a..d6a6d91 100644 (file)
@@ -1,3 +1,7 @@
+2012-09-28  Tomohiro Matsuyama  <tomo@cx4a.org>
+
+       * profiler.c (sigprof_handler): Fix race condition.
+
 2012-09-28  Glenn Morris  <rgm@gnu.org>
 
        * lread.c (lisp_file_lexically_bound_p): Handle #! lines.  (Bug#12528)
index 877a42c..4d748b5 100644 (file)
@@ -24,6 +24,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <signal.h>
 #include <setjmp.h>
 #include "lisp.h"
+#include "syssignal.h"
 
 /* Logs.  */
 
@@ -214,7 +215,7 @@ static int current_sample_interval;
 /* Signal handler for sample profiler.  */
 
 static void
-sigprof_handler (int signal)
+sigprof_handler_1 (int signal)
 {
   eassert (HASH_TABLE_P (cpu_log));
   if (backtrace_list && EQ (*backtrace_list->function, Qautomatic_gc))
@@ -229,6 +230,12 @@ sigprof_handler (int signal)
     record_backtrace (XHASH_TABLE (cpu_log), current_sample_interval);
 }
 
+static void
+sigprof_handler (int signal)
+{
+  deliver_process_signal (signal, sigprof_handler_1);
+}
+
 DEFUN ("profiler-cpu-start", Fprofiler_cpu_start, Sprofiler_cpu_start,
        1, 1, 0,
        doc: /* Start or restart the cpu profiler.