0.8.17.11:
[sbcl.git] / src / code / profile.lisp
index 729be4f..97dba1f 100644 (file)
        (let ((dticks 0)
             (dconsing 0)
             (inner-enclosed-profiles 0))
+         (declare (optimize (safety 0)))
         (declare (type unsigned-byte dticks dconsing))
         (declare (type unsigned-byte inner-enclosed-profiles))
         (aver (typep dticks 'unsigned-byte))
                         (pcounter-or-fixnum->integer *enclosed-profiles*))
                   (let ((net-dticks (fastbig- dticks *enclosed-ticks*)))
                     (fastbig-incf-pcounter-or-fixnum ticks net-dticks))
-                  (let ((net-dconsing (fastbig- dconsing
-                                                (pcounter-or-fixnum->integer
-                                                 *enclosed-consing*))))
+                  (let ((net-dconsing (fastbig-
+                                        (fastbig- dconsing
+                                                  (pcounter-or-fixnum->integer
+                                                   *enclosed-consing*))
+                                        ;; three variables with value
+                                        ;; cells two bytes each.
+                                        (* 3 2 sb-vm:n-word-bytes))))
                     (fastbig-incf-pcounter-or-fixnum consing net-dconsing))
                   (fastbig-incf-pcounter-or-fixnum profiles
                                                    inner-enclosed-profiles))))
   (let ((encapsulated-fun (fdefinition name)))
     (multiple-value-bind (encapsulation-fun read-stats-fun clear-stats-fun)
        (profile-encapsulation-lambdas encapsulated-fun)
-      (setf (fdefinition name)
-           encapsulation-fun)
+      (without-package-locks
+       (setf (fdefinition name)
+            encapsulation-fun))
       (setf (gethash name *profiled-fun-name->info*)
            (make-profile-info :name name
                               :encapsulated-fun encapsulated-fun
     (cond (pinfo
           (remhash name *profiled-fun-name->info*)
           (if (eq (fdefinition name) (profile-info-encapsulation-fun pinfo))
-              (setf (fdefinition name) (profile-info-encapsulated-fun pinfo))
+              (without-package-locks
+               (setf (fdefinition name) (profile-info-encapsulated-fun pinfo)))
               (warn "preserving current definition of redefined function ~S"
                     name)))
          (t
@@ -514,6 +521,6 @@ Lisp process."
 ;;; then load the old *OVERHEAD* value from the .core file into a
 ;;; different machine running at a different speed. We avoid this by
 ;;; erasing *CALL-OVERHEAD* whenever we save a .core file.
-(pushnew (lambda ()
-          (makunbound '*overhead*))
-        *before-save-initializations*)
+(defun profile-deinit ()
+  (without-package-locks
+    (makunbound '*overhead*)))