From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dima Kogan Newsgroups: gmane.emacs.bugs Subject: bug#19292: 24.3; [PATCH] erc-server-ping-timer-alist now has at most one timer per buffer Date: Sat, 06 Dec 2014 14:49:13 -0800 Message-ID: <87egsc4cnq.fsf@secretsauce.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1417906228 19644 80.91.229.3 (6 Dec 2014 22:50:28 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 6 Dec 2014 22:50:28 +0000 (UTC) To: 19292@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Dec 06 23:50:22 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XxOBA-00004y-6U for geb-bug-gnu-emacs@m.gmane.org; Sat, 06 Dec 2014 23:50:20 +0100 Original-Received: from localhost ([::1]:55829 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxOB9-0007b3-QY for geb-bug-gnu-emacs@m.gmane.org; Sat, 06 Dec 2014 17:50:19 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40003) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxOAz-0007RY-LZ for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:50:16 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XxOAs-0008UC-Vh for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:50:09 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:58518) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxOAs-0008Ta-SF for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:50:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1XxOAs-0000Dz-2Y for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:50:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Dima Kogan Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 06 Dec 2014 22:50:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 19292 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.1417906179802 (code B ref -1); Sat, 06 Dec 2014 22:50:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 6 Dec 2014 22:49:39 +0000 Original-Received: from localhost ([127.0.0.1]:55731 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XxOAU-0000Cs-Lx for submit@debbugs.gnu.org; Sat, 06 Dec 2014 17:49:39 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:38183) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XxOAS-0000Cg-9x for submit@debbugs.gnu.org; Sat, 06 Dec 2014 17:49:36 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XxOAL-0008DM-G0 for submit@debbugs.gnu.org; Sat, 06 Dec 2014 17:49:36 -0500 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:40649) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxOAL-0008DC-D0 for submit@debbugs.gnu.org; Sat, 06 Dec 2014 17:49:29 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39886) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxOAF-0006xy-HC for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:49:29 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XxOA9-00089U-QU for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:49:23 -0500 Original-Received: from out3-smtp.messagingengine.com ([66.111.4.27]:52987) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxOA9-000893-Hz for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 17:49:17 -0500 Original-Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id B04EA206B6 for ; Sat, 6 Dec 2014 17:49:15 -0500 (EST) Original-Received: from frontend2 ([10.202.2.161]) by compute3.internal (MEProxy); Sat, 06 Dec 2014 17:49:15 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=secretsauce.net; h=x-sasl-enc:from:to:subject:date:message-id:mime-version :content-type; s=mesmtp; bh=1T66VawViyMhd0obRqxxoz6oAD8=; b=Y6Bn L72L0WW1yUszUBofPbeyC4PzOkPGhkBPjNPre853ZK1VzdxakznXIaqd69dx8DAQ ktMBWVulV1chO6WTYIYbvUifC61f5fE5m7i2fIMI1o64LQSIZe2tdYRW+/TrCbin BREdpZHcL9Vh3r2GOQm7rOC2c+1D+scNUxiz3kk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=x-sasl-enc:from:to:subject:date :message-id:mime-version:content-type; s=smtpout; bh=1T66VawViyM hd0obRqxxoz6oAD8=; b=WdHcbtLBkVGsiFwuvKc5Mr70z7nYBM/tARh1MiPRInv +7JW5EcjBgDnKHqAqN09bPsmKYC/RMhdWUdODP4pGul2yfdFRvMdmx8+EKnSDNWO hV4hH5r+30KJ25dV2/JJOqMJ7qZHJzyhtqlRXXtxJOHBVc3MuCwR7eW/kxRdK8mA = X-Sasl-enc: GXZI+Zkc1Q4buzCTRoU/cYV1x1XbLyj5KPxz9olhwh9U 1417906155 Original-Received: from shorty.local (unknown [76.91.145.213]) by mail.messagingengine.com (Postfix) with ESMTPA id 6A9276801EB for ; Sat, 6 Dec 2014 17:49:15 -0500 (EST) Original-Received: from dima by shorty.local with local (Exim 4.82_1-5b7a7c0-XX) (envelope-from ) id 1XxOA6-00016x-5n for bug-gnu-emacs@gnu.org; Sat, 06 Dec 2014 14:49:14 -0800 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:96929 Archived-At: --=-=-= Content-Type: text/plain This alist was meant to map buffers to timers, but the "push" function was not checking for already-existing timers. This was causing a flood of PINGs being queued (because more than one timer was inserting those), and the flood-control logic would block those from going through quickly. This patch checks for existing timers in the alist before adding new ones. If a timer already exists, it is cancelled and overwritten. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-erc-server-ping-timer-alist-now-has-at-most-one-time.patch >From 421c00345c3407fff7044092c458316c6da870a6 Mon Sep 17 00:00:00 2001 From: Dima Kogan Date: Sat, 6 Dec 2014 14:46:51 -0800 Subject: [PATCH] erc-server-ping-timer-alist now has at most one timer per buffer This alist was meant to map buffers to timers, but the "push" function was not checking for already-existing timers. This was causing a flood of PINGs being queued (because more than one timer was inserting those), and the flood-control logic would block those from going through quickly. This patch checks for existing timers in the alist before adding new ones. If a timer already exists, it is cancelled and overwritten. --- lisp/erc/erc-backend.el | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index fb22f58..bedb20f 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -493,9 +493,19 @@ The current buffer is given by BUFFER." 4 erc-server-send-ping-interval #'erc-server-send-ping buffer)) - (setq erc-server-ping-timer-alist (cons (cons buffer - erc-server-ping-handler) - erc-server-ping-timer-alist))))) + + ;; I check the timer alist for an existing timer. If one exists, + ;; I get rid of it + (let ((timer-tuple (assq buffer erc-server-ping-timer-alist))) + (if timer-tuple + ;; this buffer already has a timer. Cancel it and set the new one + (progn + (erc-cancel-timer (cdr timer-tuple)) + (setf (cdr (assq buffer erc-server-ping-timer-alist)) erc-server-ping-handler)) + + ;; no existing timer for this buffer. Add new one + (add-to-list 'erc-server-ping-timer-alist + (cons buffer erc-server-ping-handler))))))) (defun erc-server-process-alive (&optional buffer) "Return non-nil when BUFFER has an `erc-server-process' open or running." -- 2.0.0 --=-=-=--