Author: Ronan Lamy <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit