changeset 105124:ff7266798210

(bookmark-write-file): Avoid calling `pp' with large list, to workaround performance problem (bug#4485).
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 20 Sep 2009 14:54:17 +0000
parents 617489f8a7ad
children 5b60f304b8d9
files lisp/ChangeLog lisp/bookmark.el
diffstat 2 files changed, 15 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Sep 20 05:40:50 2009 +0000
+++ b/lisp/ChangeLog	Sun Sep 20 14:54:17 2009 +0000
@@ -1,3 +1,8 @@
+2009-09-20  Thierry Volpiatto  <thierry.volpiatto@gmail.com>
+
+	* bookmark.el (bookmark-write-file): Avoid calling `pp' with large
+	list, to workaround performance problem (bug#4485).
+
 2009-09-20  Nick Roberts  <nickrob@snap.net.nz>
 
 	* progmodes/gud.el (gud-sentinel): Revert indavertant change.
@@ -17,8 +22,8 @@
 
 2009-09-19  Chong Yidong  <cyd@stupidchicken.com>
 
-	* emacs-lisp/advice.el (ad-get-argument, ad-set-argument): Doc
-	fix (Bug#3932).
+	* emacs-lisp/advice.el (ad-get-argument, ad-set-argument):
+	Doc fix (Bug#3932).
 
 	* subr.el (baud-rate): Remove long-obsolete function (Bug#4372).
 
@@ -26,8 +31,8 @@
 	(time-stamp-dd/mm/yyyy, time-stamp-mon-dd-yyyy)
 	(time-stamp-dd-mon-yy, time-stamp-yy/mm/dd)
 	(time-stamp-yyyy/mm/dd, time-stamp-yyyy-mm-dd)
-	(time-stamp-yymmdd, time-stamp-hh:mm:ss, time-stamp-hhmm): Remove
-	functions that have been obsolete since 1995 (Bug#4436).
+	(time-stamp-yymmdd, time-stamp-hh:mm:ss, time-stamp-hhmm):
+	Remove functions that have been obsolete since 1995 (Bug#4436).
 
 	* progmodes/sh-script.el (sh-learn-buffer-indent): Pop to the
 	indent buffer only if called interactively (Bug#4452).
--- a/lisp/bookmark.el	Sun Sep 20 05:40:50 2009 +0000
+++ b/lisp/bookmark.el	Sun Sep 20 14:54:17 2009 +0000
@@ -1301,7 +1301,12 @@
     (let ((print-length nil)
           (print-level nil))
       (bookmark-insert-file-format-version-stamp)
-      (pp bookmark-alist (current-buffer))
+      (insert "(")
+      ;; Rather than a single call to `pp' we make one per bookmark.
+      ;; Apparently `pp' has a poor algorithmic complexity, so this
+      ;; scales a lot better.  bug#4485.
+      (dolist (i  bookmark-alist) (pp i (current-buffer)))
+      (insert ")")
       (let ((version-control
              (cond
               ((null bookmark-version-control) nil)