emacs-diffs
[Top][All Lists]
Advanced

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

master 873499ce06 06/25: Allow exemption from flood penalty in erc-backe


From: F. Jason Park
Subject: master 873499ce06 06/25: Allow exemption from flood penalty in erc-backend
Date: Thu, 30 Jun 2022 18:29:52 -0400 (EDT)

branch: master
commit 873499ce065144682852643b7d0e04cd45f7eac3
Author: F. Jason Park <jp@neverwas.me>
Commit: F. Jason Park <jp@neverwas.me>

    Allow exemption from flood penalty in erc-backend
    
    * lisp/erc/erc-backend (erc-server-send, erc-server-PING): Change name
    of param `forcep' in `erc-server-send' to `force' and change its type
    to the union of the symbol `no-penalty' and the set of all other
    non-nil values.  In `erc-server-PING', use this exemption when calling
    `erc-server-send'.  This fix was fast tracked and summarily
    incorporated into bug#48598 because users of the soju bouncer are all
    affected.  See update #5 in the bug's email thread under the section
    entitled "Riders" for an explanation.
---
 lisp/erc/erc-backend.el | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 13303c71f5..5812fa4139 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -815,11 +815,12 @@ Use DISPLAY-FN to show the results."
         (erc-split-line text)))
 
 ;; From Circe, with modifications
-(defun erc-server-send (string &optional forcep target)
+(defun erc-server-send (string &optional force target)
   "Send STRING to the current server.
-If FORCEP is non-nil, no flood protection is done - the string is
-sent directly.  This might cause the messages to arrive in a wrong
-order.
+When FORCE is non-nil, bypass flood protection so that STRING is
+sent directly without modifying the queue.  When FORCE is the
+symbol `no-penalty', exempt this round from accumulating a
+timeout penalty.
 
 If TARGET is specified, look up encoding information for that
 channel in `erc-encoding-coding-alist' or
@@ -835,11 +836,11 @@ protection algorithm."
     (if (erc-server-process-alive)
         (erc-with-server-buffer
           (let ((str (concat string "\r\n")))
-            (if forcep
+            (if force
                 (progn
-                  (setq erc-server-flood-last-message
-                        (+ erc-server-flood-penalty
-                           erc-server-flood-last-message))
+                  (unless (eq force 'no-penalty)
+                    (cl-incf erc-server-flood-last-message
+                             erc-server-flood-penalty))
                   (erc-log-irc-protocol str 'outbound)
                   (condition-case nil
                       (progn
@@ -1469,7 +1470,7 @@ add things to `%s' instead."
   (let ((pinger (car (erc-response.command-args parsed))))
     (erc-log (format "PING: %s" pinger))
     ;; ping response to the server MUST be forced, or you can lose big
-    (erc-server-send (format "PONG :%s" pinger) t)
+    (erc-server-send (format "PONG :%s" pinger) 'no-penalty)
     (when erc-verbose-server-ping
       (erc-display-message
        parsed 'error proc



reply via email to

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