Author: Armin Rigo <ar...@tunes.org>
Branch: vmprof-review
Changeset: r78747:2ea21e4d4d89
Date: 2015-08-02 17:49 +0200
http://bitbucket.org/pypy/pypy/changeset/2ea21e4d4d89/

Log:    Forgot to call the remove_*() functions in disable()

diff --git a/rpython/rlib/rvmprof/src/rvmprof.c 
b/rpython/rlib/rvmprof/src/rvmprof.c
--- a/rpython/rlib/rvmprof/src/rvmprof.c
+++ b/rpython/rlib/rvmprof/src/rvmprof.c
@@ -90,8 +90,8 @@
 #define MARKER_VIRTUAL_IP '\x02'
 #define MARKER_TRAILER '\x03'
 
-static int profile_file;
-static long profile_interval_usec;
+static int profile_file = -1;
+static long profile_interval_usec = 0;
 static char atfork_hook_installed = 0;
 
 static int _write_all(const void *buf, size_t bufsize)
@@ -204,26 +204,27 @@
     profile_interval_usec = interval_usec;
 
     if (install_pthread_atfork_hooks() == -1)
-        return -1;
+        goto error;
     if (install_sigprof_handler() == -1)
-        return -1;
+        goto error;
     if (install_sigprof_timer() == -1)
-        return -1;
+        goto error;
     rpython_vmprof_ignore_signals(0);
     return 0;
+
+ error:
+    profile_file = -1;
+    profile_interval_usec = 0;
+    return -1;
 }
 
-RPY_EXTERN
-int rpython_vmprof_disable(void)
+static int close_profile(void)
 {
     int srcfd;
     char buf[4096];
     ssize_t size;
     unsigned char marker = MARKER_TRAILER;
 
-    rpython_vmprof_ignore_signals(1);
-    profile_interval_usec = 0;
-
     if (_write_all(&marker, 1) < 0)
         return -1;
 
@@ -235,7 +236,10 @@
         return -1;
 
     while ((size = read(srcfd, buf, sizeof buf)) > 0) {
-        _write_all(buf, size);
+        if (_write_all(buf, size) < 0) {
+            close(srcfd);
+            return -1;
+        }
     }
     close(srcfd);
 #else
@@ -253,5 +257,20 @@
     pclose(src);
 #endif
 
+    /* don't close() the file descriptor from here */
+    profile_file = -1;
     return 0;
 }
+
+RPY_EXTERN
+int rpython_vmprof_disable(void)
+{
+    rpython_vmprof_ignore_signals(1);
+    profile_interval_usec = 0;
+
+    if (remove_sigprof_timer() == -1)
+        return -1;
+    if (remove_sigprof_handler() == -1)
+        return -1;
+    return close_profile();
+}
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to