emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r101308: gnus-ems.el: Make process-pl


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r101308: gnus-ems.el: Make process-plist functions work.
Date: Fri, 03 Sep 2010 01:00:10 +0000
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 101308
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Fri 2010-09-03 01:00:10 +0000
message:
  gnus-ems.el: Make process-plist functions work.
modified:
  lisp/gnus/ChangeLog
  lisp/gnus/gnus-ems.el
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2010-09-03 00:55:58 +0000
+++ b/lisp/gnus/ChangeLog       2010-09-03 01:00:10 +0000
@@ -1,3 +1,9 @@
+2010-09-03  Katsumi Yamaoka  <address@hidden>
+
+       * gnus-ems.el (gnus-set-process-plist, gnus-process-plist): Change name
+       of symbol that holds plist data.
+       (gnus-process-plist): Remove plist of process after getting it.
+
 2010-09-02  Lars Magne Ingebrigtsen  <address@hidden>
 
        * message.el (message-generate-hashcash): Change default to

=== modified file 'lisp/gnus/gnus-ems.el'
--- a/lisp/gnus/gnus-ems.el     2010-09-02 00:55:51 +0000
+++ b/lisp/gnus/gnus-ems.el     2010-09-03 01:00:10 +0000
@@ -314,24 +314,31 @@
        (defalias 'gnus-process-put 'process-put))
     (defun gnus-set-process-plist (process plist)
       "Replace the plist of PROCESS with PLIST.  Returns PLIST."
-      (put 'gnus-process-plist process plist))
+      (put 'gnus-process-plist-internal process plist))
+
     (defun gnus-process-plist (process)
       "Return the plist of PROCESS."
-      ;; Remove those of dead processes from `gnus-process-plist'
-      ;; to prevent it from growing.
-      (let ((plist (symbol-plist 'gnus-process-plist))
-           proc)
-       (while (setq proc (car plist))
-         (if (and (processp proc)
-                  (memq (process-status proc) '(open run)))
-             (setq plist (cddr plist))
-           (setcar plist (caddr plist))
-           (setcdr plist (or (cdddr plist) '(nil))))))
-      (get 'gnus-process-plist process))
+      ;; This form works but can't prevent the plist data from
+      ;; growing infinitely.
+      ;;(get 'gnus-process-plist-internal process)
+      (let* ((plist (symbol-plist 'gnus-process-plist-internal))
+            (tem (memq process plist)))
+       (prog1
+           (cadr tem)
+         ;; Remove it from the plist data.
+         (when tem
+           (if (eq plist tem)
+               (progn
+                 (setcar plist (caddr plist))
+                 (setcdr plist (or (cdddr plist) '(nil))))
+             (setcdr (nthcdr (- (length plist) (length tem) 1) plist)
+                     (cddr tem)))))))
+
     (defun gnus-process-get (process propname)
       "Return the value of PROCESS' PROPNAME property.
 This is the last value stored with `(gnus-process-put PROCESS PROPNAME 
VALUE)'."
       (plist-get (gnus-process-plist process) propname))
+
     (defun gnus-process-put (process propname value)
       "Change PROCESS' PROPNAME property to VALUE.
 It can be retrieved with `(gnus-process-get PROCESS PROPNAME)'."


reply via email to

[Prev in Thread] Current Thread [Next in Thread]