CVS update by aidan packages/xemacs-packages/erc ...

[email protected] 15 Sep 2009 07:15:52 -0000
Newsgroups gmane.emacs.xemacs.cvs
Message-ID <[email protected]>
  User: aidan   
  Date: 09/09/15 09:15:52

  Modified:    packages/xemacs-packages/erc ChangeLog erc-log.el
Log:
Don't leak memory in XEmacs with huge log files, ERC.

Revision  Changes    Path
1.43      +11 -0     XEmacs/packages/xemacs-packages/erc/ChangeLog

Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/erc/ChangeLog,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -p -r1.42 -r1.43
--- ChangeLog	2008/07/23 18:09:47	1.42
+++ ChangeLog	2009/09/15 07:15:49	1.43
@@ -1,3 +1,14 @@
+2009-07-22  Aidan Kehoe  <[email protected]>
+
+	* erc-log.el (erc-log-setup-logging): 
+	Don't insert the entire log file into the buffer if
+	erc-truncate-buffer is in erc-insert-post-hook (even though most
+	of the buffer is later deleted in this case); avoids XEmacs
+	keeping lots of memory around needlessly when log files are huge
+	but buffer sizes are tiny. GNU Emacs doesn't do this, but it
+	should be a win there too, there's no need to create a 100 MB
+	buffer needlessly. 
+
 2008-07-23  Norbert Koch  <[email protected]>
 
 	* Makefile (VERSION): XEmacs package 0.22 released.



1.11      +11 -3     XEmacs/packages/xemacs-packages/erc/erc-log.el

Index: erc-log.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/erc/erc-log.el,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- erc-log.el	2008/07/23 07:23:12	1.10
+++ erc-log.el	2009/09/15 07:15:49	1.11
@@ -230,9 +230,17 @@ This function is destined to be run from
 	   (set (make-local-variable 'write-file-hooks)
 		'(erc-save-buffer-in-logs))))
     (when erc-log-insert-log-on-open
-      (ignore-errors (insert-file-contents (erc-current-logfile))
-		     (move-marker erc-last-saved-position
-				  (1- (point-max)))))))
+      (let* ((log-file (erc-current-logfile))
+             (log-file-size (nth 7 (file-attributes log-file)))
+             (start (if (and log-file-size
+                             (memq 'erc-truncate-buffer
+				   erc-insert-post-hook))
+                        (- log-file-size erc-max-buffer-size)
+                      0)))
+        (ignore-errors (insert-file-contents log-file nil start
+                                             log-file-size))
+        (move-marker erc-last-saved-position
+                      (1- (point-max)))))))
 
 ;;; Append, so that 'erc-initialize-log-marker keeps running first.
 (add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append)