From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4869 invoked by alias); 3 Oct 2016 16:07:31 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39548 Received: (qmail 5199 invoked from network); 3 Oct 2016 16:07:31 -0000 X-Qmail-Scanner-Diagnostics: from mail-pa0-f65.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.220.65):SA:0(0.0/5.0):. Processed in 0.160303 secs); 03 Oct 2016 16:07:31 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: schaefer@brasslantern.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at brasslantern.com does not designate permitted sender hosts) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version; bh=7q3yX6kUlRjkI1p41G/cGZsA9zCE0vTgJYYplVkTYu4=; b=i/maT4WDs8zVfRm3PdFU4D6qogxh2xPBLMatujBBYg6v+/oE1XU7kQ9tDnKaPpsglS Js23YooWVmB1nfxK/xHcnlagufussZyR1tn0YwDboDhPkwA83dA/8rG4m5Sai0o8BCLr jeMh5XnfFUGVEqX3esTEvsnD+JhRBoWKVxv01sJbj8eC8amESelJxZmlhMhotupK75Lc EXwIvNDC0TAbcpxW/FleB4HuCywkaOdDc56x+t3lUoeH/t/5zlVlw6SM9q2DBRmmpEa5 yh1efoat52G38RXq7ImTGrlc6Mew/645RDpLpOfd3JHZyzl6w12JX45Ohg0h7MFmIlYq Im2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:message-id:date:in-reply-to:comments :references:to:subject:mime-version; bh=7q3yX6kUlRjkI1p41G/cGZsA9zCE0vTgJYYplVkTYu4=; b=GMMORKsDdHEFE+yOMYYvm+8ZvG4Jsejofkw948wJq904t2MnOJ/VhEBARAkfTahlbC pflsGLSKRLysxPtGyjs9MSrY93EXopOt4fMsHYJCm4StVlhMTYbzVv9bl46QJ94m57WL LDzLYUKAU4NSFImCid81IAMBSqukmRae038XcLmtKqqvGEnnZ6jSnvbUG7LelDDe4Ye8 i3oL1laLQdWvBDpVPbkcmuBaL8fk0oiLNGiScYZFHjDufECy2q3M7Saavuk6JIiWOD9G IfOv2/KMuyC1x1OBUeap5xaePRsjq9/ebMrmN4E+1tTPkzNLqfREit0ovpVWZ1mHJ+8D i2rw== X-Gm-Message-State: AA6/9RlxH+sh5s0+5+oM7eNORYJZz4k5f7kKjhYRl55N6zxbDPfVuTiV/c77pQ22xjkSRQ== X-Received: by 10.66.193.135 with SMTP id ho7mr39254665pac.12.1475510844664; Mon, 03 Oct 2016 09:07:24 -0700 (PDT) From: Bart Schaefer Message-Id: <161003090750.ZM8137@torch.brasslantern.com> Date: Mon, 3 Oct 2016 09:07:50 -0700 In-Reply-To: <161003082029.ZM7267@torch.brasslantern.com> Comments: In reply to Bart Schaefer "Re: [BUG] queueing_enabled grows infinitely when in .recursive-edit" (Oct 3, 8:20am) References: <161002162145.ZM22574@torch.brasslantern.com> <20161003111840.3e5081f0@pwslap01u.europe.root.pri> <161003082029.ZM7267@torch.brasslantern.com> X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: Zsh hackers list Subject: Re: [BUG] queueing_enabled grows infinitely when in .recursive-edit MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Oct 3, 8:20am, Bart Schaefer wrote: } } I will clean up that additional debugging for signals.h to make it } suitable for commit, so that we have a better chance of catching these } problems in new code. Here is that. diff --git a/Src/signals.c b/Src/signals.c index e2587dc..9e05add 100644 --- a/Src/signals.c +++ b/Src/signals.c @@ -72,6 +72,10 @@ mod_export int queueing_enabled, queue_front, queue_rear; mod_export int signal_queue[MAX_QUEUE_SIZE]; /**/ mod_export sigset_t signal_mask_queue[MAX_QUEUE_SIZE]; +#ifdef DEBUG +/**/ +mod_export int queue_in; +#endif /* Variables used by trap queueing */ diff --git a/Src/signals.h b/Src/signals.h index d680968..1904f43 100644 --- a/Src/signals.h +++ b/Src/signals.h @@ -82,8 +82,6 @@ #define MAX_QUEUE_SIZE 128 -#define queue_signals() (queueing_enabled++) - #define run_queued_signals() do { \ while (queue_front != queue_rear) { /* while signals in queue */ \ sigset_t oset; \ @@ -94,12 +92,35 @@ } \ } while (0) +#ifdef DEBUG + +#define queue_signals() (queue_in++, queueing_enabled++) + #define unqueue_signals() do { \ DPUTS(!queueing_enabled, "BUG: unqueue_signals called but not queueing"); \ + --queue_in; \ if (!--queueing_enabled) run_queued_signals(); \ } while (0) -#define queue_signal_level() queueing_enabled +#define dont_queue_signals() do { \ + queue_in = queueing_enabled; \ + queueing_enabled = 0; \ + run_queued_signals(); \ +} while (0) + +#define restore_queue_signals(q) do { \ + DPUTS2(queueing_enabled && queue_in != q, \ + "BUG: q = %d != queue_in = %d", q, queue_in); \ + queue_in = (queueing_enabled = (q)); \ +} while (0) + +#else /* !DEBUG */ + +#define queue_signals() (queueing_enabled++) + +#define unqueue_signals() do { \ + if (!--queueing_enabled) run_queued_signals(); \ +} while (0) #define dont_queue_signals() do { \ queueing_enabled = 0; \ @@ -108,6 +129,10 @@ #define restore_queue_signals(q) (queueing_enabled = (q)) +#endif /* DEBUG */ + +#define queue_signal_level() queueing_enabled + #ifdef BSD_SIGNALS #define signal_block(S) sigblock(S) #else