Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: py3.5
Changeset: r91686:33527bb8058e
Date: 2017-07-04 22:00 +0100
http://bitbucket.org/pypy/pypy/changeset/33527bb8058e/

Log:    hg merge default

diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -58,6 +58,7 @@
         SHARED.join('compat.c'),
         SHARED.join('machine.c'),
         SHARED.join('vmp_stack.c'),
+        SHARED.join('vmprof_main.c'),
         # symbol table already in separate_module_files
     ] + separate_module_files,
     post_include_bits=[],
diff --git a/rpython/rlib/rvmprof/src/shared/vmprof_main.c 
b/rpython/rlib/rvmprof/src/shared/vmprof_main.c
new file mode 100644
--- /dev/null
+++ b/rpython/rlib/rvmprof/src/shared/vmprof_main.c
@@ -0,0 +1,30 @@
+#ifdef VMPROF_UNIX
+
+#include <unistd.h>
+/* value: LSB bit is 1 if signals must be ignored; all other bits
+   are a counter for how many threads are currently in a signal handler */
+static long volatile signal_handler_value = 1;
+
+void vmprof_ignore_signals(int ignored)
+{
+    if (!ignored) {
+        __sync_fetch_and_and(&signal_handler_value, ~1L);
+    } else {
+        /* set the last bit, and wait until concurrently-running signal
+           handlers finish */
+        while (__sync_or_and_fetch(&signal_handler_value, 1L) != 1L) {
+            usleep(1);
+        }
+    }
+}
+
+long vmprof_enter_signal(void)
+{
+    return __sync_fetch_and_add(&signal_handler_value, 2L);
+}
+
+long vmprof_exit_signal(void)
+{
+    return __sync_sub_and_fetch(&signal_handler_value, 2L);
+}
+#endif
diff --git a/rpython/rlib/rvmprof/src/shared/vmprof_main.h 
b/rpython/rlib/rvmprof/src/shared/vmprof_main.h
--- a/rpython/rlib/rvmprof/src/shared/vmprof_main.h
+++ b/rpython/rlib/rvmprof/src/shared/vmprof_main.h
@@ -60,25 +60,9 @@
 
 /************************************************************/
 
-/* value: last bit is 1 if signals must be ignored; all other bits
-   are a counter for how many threads are currently in a signal handler */
-static long volatile signal_handler_value = 1;
-
-RPY_EXTERN
-void vmprof_ignore_signals(int ignored)
-{
-    if (!ignored) {
-        __sync_fetch_and_and(&signal_handler_value, ~1L);
-    }
-    else {
-        /* set the last bit, and wait until concurrently-running signal
-           handlers finish */
-        while (__sync_or_and_fetch(&signal_handler_value, 1L) != 1L) {
-            usleep(1);
-        }
-    }
-}
-
+RPY_EXTERN void vmprof_ignore_signals(int ignored);
+RPY_EXTERN long vmprof_enter_signal(void);
+RPY_EXTERN long vmprof_exit_signal(void);
 
 /* *************************************************************
  * functions to write a profile file compatible with gperftools
@@ -276,7 +260,7 @@
     __sync_lock_release(&spinlock);
 #endif
 
-    long val = __sync_fetch_and_add(&signal_handler_value, 2L);
+    long val = vmprof_enter_signal();
 
     if ((val & 1) == 0) {
         int saved_errno = errno;
@@ -307,7 +291,7 @@
         errno = saved_errno;
     }
 
-    __sync_sub_and_fetch(&signal_handler_value, 2L);
+    vmprof_exit_signal();
 }
 
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to