Stefan Kangas <stefankangas@HIDDEN>
to control <at> debbugs.gnu.org.
Full text available.
Received: (at 65211) by debbugs.gnu.org; 11 Aug 2023 08:33:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Aug 11 04:33:04 2023
Received: from localhost ([127.0.0.1]:44858 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1qUNZv-0002SG-Ie
for submit <at> debbugs.gnu.org; Fri, 11 Aug 2023 04:33:04 -0400
Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]:56439)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <eller.helmut@HIDDEN>) id 1qUNZt-0002Rl-Hq
for 65211 <at> debbugs.gnu.org; Fri, 11 Aug 2023 04:33:02 -0400
Received: by mail-lj1-x22b.google.com with SMTP id
38308e7fff4ca-2b9a2033978so26718421fa.0
for <65211 <at> debbugs.gnu.org>; Fri, 11 Aug 2023 01:33:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20221208; t=1691742775; x=1692347575;
h=mime-version:user-agent:message-id:date:references:in-reply-to
:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=RRRTt6p2pi6raXPk1D3iPMwvaZhTCklLK5kXqf8DYtI=;
b=kMrEEHB7qseVm2+31Xrjsi1hoO3tX8Pxb+e20nSRVThiywM3rppVS+GKe97dRoqNYW
Lb/EMUqWlxcPBHB5S5v3NABRUelY1daOBASEVeQ7XULrisifYzOM3ZH5tvSZALi4sIDb
O/RL689qTvp+qySSeEgAcfhAEMP5iR+YFqw0i+bG+DSpjgTZS6dw7cLUdUnQdLxVURPt
4VgBLDn07yqqhsZM03zysT7KcexpSP1JU/pbyllb2TbuoGT3a58V2zqwlrnPj+Vr5I+4
BHx1TI+xhAE2ucBMI6/BizgCH0ZBfJZSDd54/gJACI5EpJpWtlj/j7vSKVt7WU8+voC6
qvcw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20221208; t=1691742775; x=1692347575;
h=mime-version:user-agent:message-id:date:references:in-reply-to
:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=RRRTt6p2pi6raXPk1D3iPMwvaZhTCklLK5kXqf8DYtI=;
b=FzC5acn0z8Ewm+NOJT5YndWDN5xog/8yvFShUBBhAFqFl4w8jfJj36UeNlGQVd80dg
hO9GqFNsm8lVRUWSF8LQYFk1GYIuGR6v3c84f89Ka+V52ojzbGv3Q11BMuGT2e8tioS+
I2ZRKuKFCltXanFTWxPPq3kHHHpAHddslVxqgWcXgeNBnC48cXbN+CxGiz568x5cH5lZ
AIQEwXPoH6jmRqkdjSFkShwA9FKBZMIYxwd6htdSPNN+Cx40rJW3Z59tzQGPiHqpI6cU
WT97hJtYVssPhtaywPJ8M2B3/ZT3kveVbYLvwRFd8Bgtz5EosESYOb3XatlXFebrDZNu
0CBw==
X-Gm-Message-State: AOJu0YwunQMTC+V0Z4tAb/yiUISIh8AchVU5YK9hwmjUjjBvJR4/qzjd
NmS4+kdd6XJLqU+7dWRh8+eLTgwEMvw=
X-Google-Smtp-Source: AGHT+IEzDeCSW8MUsCHnWncqqYqVNSAVcuv8jUv2GyfiU4HsM9BdHZugQakxu92BHJ+EBjU1cadFGg==
X-Received: by 2002:a2e:b616:0:b0:2b6:ea3b:f082 with SMTP id
r22-20020a2eb616000000b002b6ea3bf082mr1041416ljn.38.1691742774701;
Fri, 11 Aug 2023 01:32:54 -0700 (PDT)
Received: from caladan ([185.127.213.71]) by smtp.gmail.com with ESMTPSA id
x16-20020a05600c2a5000b003fe13c3ece7sm7387488wme.10.2023.08.11.01.32.53
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Fri, 11 Aug 2023 01:32:54 -0700 (PDT)
From: Helmut Eller <eller.helmut@HIDDEN>
To: Robert Pluim <rpluim@HIDDEN>
Subject: Re: bug#65211: 30.0.50; threads and accept-process-output
In-Reply-To: <87sf8q6hzb.fsf@HIDDEN> (Robert Pluim's message of "Thu, 10
Aug 2023 17:21:28 +0200")
References: <m21qgb2b1r.fsf@HIDDEN> <87sf8q6hzb.fsf@HIDDEN>
Date: Fri, 11 Aug 2023 10:32:53 +0200
Message-ID: <m2il9mq8qy.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 65211
Cc: 65211 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
On Thu, Aug 10 2023, Robert Pluim wrote:
> Hmm. Maybe putting it in `deactivate_process' is better (not that I=CA=BC=
ve
> tested =F0=9F=98=BA)
After a night of sleep, it occurred to me that this could also be
considered a problem of incomplete initialization of the
fd_callback_info[fd] struct.
So I wondered who is supposed to initialize it. Unfortunately, there is
half a dozen of add_<foo>_fd functions that set various bits, some call
each other, some duplicate code. None of them sets the waiting_thread
slot. And there is no single point that clears everything out (except
init_process_emacs).
I also discovered that recompute_max_desc considers an fd unused if the
.flags field is zero. Luckily, recompute_max_desc is only called in
three places: delete_write_fd, delete_keyboard_wait_descriptor and
deactivate_process. The call in deactivate_process seems redundant as
it calls the other two anyway. It seems easier to re-initialize the
struct when it becomes unused than to initialize it when it is used the
first time.
So I'm proposing the patch below that moves the re-initialization to one
single place, namely: recompute_max_desc.
Helmut
--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
filename=0001-Re-initialize-fd_callback_data-fd-more-thoroughly.patch
From 675a76b297e9f050f719489a1419f0278ad8e9ae Mon Sep 17 00:00:00 2001
From: Helmut Eller <eller.helmut@HIDDEN>
Date: Fri, 11 Aug 2023 10:31:24 +0200
Subject: [PATCH] Re-initialize fd_callback_data[fd] more thoroughly
The waiting_thread field was not re-initialized properly when a a
closed file descriptor resued by another process. (bug#65211)
As recompute_max_desc must be called when a file descriptor becomes
unused, we can do some re-initialization there.
* src/process.c (recompute_max_desc): Take the fd that was just
deleted as argument fd. If the flags field is 0, reset the rest of
the struct too.
(delete_write_fd, delete_keyboard_wait_descriptor): Update callers
accordingly.
(delete_read_fd): This is now just an alias for
delete_keyboard_wait_descriptor.
(deactivate_process): Remove the call to recompute_max_desc, as
delete_read_fd is called anyway.
---
src/process.c | 46 ++++++++++++++++------------------------------
1 file changed, 16 insertions(+), 30 deletions(-)
diff --git a/src/process.c b/src/process.c
index 08cb810ec13..cd5fd97e9d6 100644
--- a/src/process.c
+++ b/src/process.c
@@ -507,13 +507,6 @@ void
delete_read_fd (int fd)
{
delete_keyboard_wait_descriptor (fd);
-
- eassert (0 <= fd && fd < FD_SETSIZE);
- if (fd_callback_info[fd].flags == 0)
- {
- fd_callback_info[fd].func = 0;
- fd_callback_info[fd].data = 0;
- }
}
/* Add a file descriptor FD to be monitored for when write is possible.
@@ -544,19 +537,22 @@ add_non_blocking_write_fd (int fd)
}
static void
-recompute_max_desc (void)
+recompute_max_desc (int fd)
{
- int fd;
-
+ eassert (0 <= fd && fd < FD_SETSIZE);
eassert (max_desc < FD_SETSIZE);
- for (fd = max_desc; fd >= 0; --fd)
- {
+
+ if (fd_callback_info[fd].flags == 0)
+ fd_callback_info[fd] = (struct fd_callback_data){ 0 };
+
+ if (fd == max_desc)
+ for (; fd >= 0; --fd)
if (fd_callback_info[fd].flags != 0)
- {
- max_desc = fd;
- break;
- }
- }
+ {
+ max_desc = fd;
+ break;
+ }
+
eassert (max_desc < FD_SETSIZE);
}
@@ -569,17 +565,10 @@ delete_write_fd (int fd)
if ((fd_callback_info[fd].flags & NON_BLOCKING_CONNECT_FD) != 0)
{
if (--num_pending_connects < 0)
- emacs_abort ();
+ emacs_abort ();
}
fd_callback_info[fd].flags &= ~(FOR_WRITE | NON_BLOCKING_CONNECT_FD);
- if (fd_callback_info[fd].flags == 0)
- {
- fd_callback_info[fd].func = 0;
- fd_callback_info[fd].data = 0;
-
- if (fd == max_desc)
- recompute_max_desc ();
- }
+ recompute_max_desc (fd);
}
static void
@@ -4809,8 +4798,6 @@ deactivate_process (Lisp_Object proc)
delete_read_fd (inchannel);
if ((fd_callback_info[inchannel].flags & NON_BLOCKING_CONNECT_FD) != 0)
delete_write_fd (inchannel);
- if (inchannel == max_desc)
- recompute_max_desc ();
}
}
@@ -8134,8 +8121,7 @@ delete_keyboard_wait_descriptor (int desc)
fd_callback_info[desc].flags &= ~(FOR_READ | KEYBOARD_FD | PROCESS_FD);
- if (desc == max_desc)
- recompute_max_desc ();
+ recompute_max_desc (desc);
#endif
}
--
2.39.2
--=-=-=--
bug-gnu-emacs@HIDDEN:bug#65211; Package emacs.
Full text available.Received: (at 65211) by debbugs.gnu.org; 10 Aug 2023 16:25:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Aug 10 12:25:08 2023 Received: from localhost ([127.0.0.1]:43910 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1qU8TB-00018b-Oj for submit <at> debbugs.gnu.org; Thu, 10 Aug 2023 12:25:08 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:42331) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eller.helmut@HIDDEN>) id 1qU8T5-00017w-UT for 65211 <at> debbugs.gnu.org; Thu, 10 Aug 2023 12:25:04 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-3fe4b95c371so6510945e9.1 for <65211 <at> debbugs.gnu.org>; Thu, 10 Aug 2023 09:24:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691684694; x=1692289494; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DJtmwUto7xkek64giLhRwUSgdKTRTS8kq95n+EuyMIE=; b=S+Wn7XCCPryYvtOcm69KLFg9hr73MoG68UoVemjv2mHTYbvD79eeEus9ebWVIMaZiU 9tc58IkVaLRyg8j/5EepXy7rpJMikA3gcGsPxWDnroyB8I3XtXdcIWxuGy2EyM+J5szs Q3/Wmk7SlEnxF4APDaQRb2FWpU0cZEf8ISL5nSX/OsA5vdwgCeBwBcIs8sUjGlgoRGO6 gfeGvlrA+lRdtRKFX6FfrGFW9CljJApIym707AGDSxcyCKLogcfE0zsSUbsZAHE9qCXw yYWXiNkOKMwG1OD5/peYuIa3t2VXdR3KhSzuts71wMfcmjOn2qwnybmUVXrZ6pTOkoFF MLLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691684694; x=1692289494; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=DJtmwUto7xkek64giLhRwUSgdKTRTS8kq95n+EuyMIE=; b=YIbRw5dtviv8wlrhnapqBLrHAbzkgHtcYhey8zoBpeWbOJIG4gBX3D3DyfgOeXlfE2 s3v0ppaPgSalnIZP11Ffb9531AtY4pKg1TS8wBv3je7Yvn5FNN5f+kHxiXHHsOl3Zz0w CaWwKPRqh7Nlg3GV7ScivSpFI2F7DAR+qpIEDc19E8V3A6/yL1szBl9aqYFlROutZjKG USGmwaOz0vC6NHKRfuJDxd8rI/a+vzEo8d+pfGNLdVXEuloToGsa5ESWw6Rii5zzQLCt OyXbBb1J63fuFfwzHKuDCHSFmz/w5MjKYMjp/oEwK5XEr/9tEmQPscw117F9SMjdYShw Fvog== X-Gm-Message-State: AOJu0Yw7zKgnhEY8GOXovBWcNEs1fsNVtsNFVUJn18iG4eDc8IGLus+F OBBTbV/Z2y9WsbY/pNbGCzsDvbN8jwA= X-Google-Smtp-Source: AGHT+IG3YiQkbdMZTGEyUm0seBb2GJpfSVXtPUDgOrUBr04TIepnrP5fERncJgLpbJUk9ATtat+vCA== X-Received: by 2002:a05:600c:3786:b0:3fe:23ec:2494 with SMTP id o6-20020a05600c378600b003fe23ec2494mr2120822wmr.7.1691684693926; Thu, 10 Aug 2023 09:24:53 -0700 (PDT) Received: from caladan (dialin-228086.xdsl.raiffeisen.net. [195.254.228.86]) by smtp.gmail.com with ESMTPSA id t15-20020a7bc3cf000000b003fe601a7d46sm5511277wmj.45.2023.08.10.09.24.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Aug 2023 09:24:53 -0700 (PDT) From: Helmut Eller <eller.helmut@HIDDEN> To: Robert Pluim <rpluim@HIDDEN> Subject: Re: bug#65211: 30.0.50; threads and accept-process-output In-Reply-To: <87sf8q6hzb.fsf@HIDDEN> (Robert Pluim's message of "Thu, 10 Aug 2023 17:21:28 +0200") References: <m21qgb2b1r.fsf@HIDDEN> <87sf8q6hzb.fsf@HIDDEN> Date: Thu, 10 Aug 2023 18:24:52 +0200 Message-ID: <m2o7jerhkb.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 65211 Cc: 65211 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On Thu, Aug 10 2023, Robert Pluim wrote: > Hmm. Maybe putting it in `deactivate_process' is better (not that I=CA=BC= ve > tested =F0=9F=98=BA) That's for the maintainers to decide. It seems to work too. To me, delete_read_fd feels like the appropriate place. For symmetry, delete_write_fd should probably also do something with .waiting_thread, but coming up with a test case for that is beyond my understanding of this code. Helmut
bug-gnu-emacs@HIDDEN:bug#65211; Package emacs.
Full text available.
Received: (at 65211) by debbugs.gnu.org; 10 Aug 2023 15:21:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Aug 10 11:21:44 2023
Received: from localhost ([127.0.0.1]:43843 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1qU7Tr-0007r7-HN
for submit <at> debbugs.gnu.org; Thu, 10 Aug 2023 11:21:44 -0400
Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:61706)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <rpluim@HIDDEN>) id 1qU7Tl-0007qp-6h
for 65211 <at> debbugs.gnu.org; Thu, 10 Aug 2023 11:21:42 -0400
Received: by mail-wm1-x32e.google.com with SMTP id
5b1f17b1804b1-3fe82a7864bso1341525e9.3
for <65211 <at> debbugs.gnu.org>; Thu, 10 Aug 2023 08:21:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20221208; t=1691680891; x=1692285691;
h=content-transfer-encoding:mime-version:message-id:date:references
:in-reply-to:subject:cc:to:from:from:to:cc:subject:date:message-id
:reply-to; bh=K+YHQxPFLms+Vt0s/3XLF5z6vOaBx19fmcxSu+0u+dQ=;
b=jJQ12GKXp0Yau+bJ4st07SfVE0HjkYwOiihyas4UoT7V2GpB5Z+Do7SEBOdtqCX9cA
1F8UbmPWyYAQk7pMCM2w6xRgcGT9/EcnJ4MwHL2R14euKGihxfEBzvNLLgRhVNrwiPL2
yK6L6mNx0krBslhaUPgfFtMwyu/ESMQ1aeK54x/KrhylUZs3/a7F6+HT0Ug3VMK5wiZz
XFRZYHrO2uOTe5HdhsKIly+B1qxNIC+tz8J0AUBCa166TOQ/0q+ru0domrTVE33w0dCN
B5h0JnDVAS2hT0VqFc6x8nGfecmwk9SEjvRPczDYVvFUW5GdNLqY47SoOw0KjEVa+J4G
GcYg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20221208; t=1691680891; x=1692285691;
h=content-transfer-encoding:mime-version:message-id:date:references
:in-reply-to:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=K+YHQxPFLms+Vt0s/3XLF5z6vOaBx19fmcxSu+0u+dQ=;
b=JjLxE7DzhzQctHBoyq46tQTkp4NYa5JrUf2mVE1k3fUhgq+uhbVQhKxu64YP29Hu8v
DInGSWvdxQ1rQ50BRo6K4VO7qAQgfsCRHd3BO9YRmIqyzCFof1sCpU6/ToiM2aIkkS1Z
hyCDV215f0Hkbk1d904AkzVXXTS4t3FY+SUeyPB427hpkn19FbHYQRR85C0Dv+M/5Yew
AzsDuVu8x1xDWvk7x7eb3iWBFFW1KyxnZ90H42CZg4/8tNVNWa+cGaXO5hn/SE2i7sZM
lWWgHZ4/CtYFUxzpQivnX6G7muCtUCk1o2YHB++hwqdTpAGhsLB90gYblD8EOkKUZ0pw
6wNQ==
X-Gm-Message-State: AOJu0Yw5tS4JzXRBZipnrdnQ8DFByBgdjVlSutTmOsNdLvmtAY0M9za6
94/i5MLNLGpfxfVYY4MNqk6nWGr4x2E=
X-Google-Smtp-Source: AGHT+IEWYcCuju+pnXCY6C90Q4Xtd0qpUzAGFY0I8NXKdu1sVi2AYnmaGUSkWEKxb0QOkK80RKCKlw==
X-Received: by 2002:a7b:c5d4:0:b0:3f9:b244:c294 with SMTP id
n20-20020a7bc5d4000000b003f9b244c294mr2468551wmk.35.1691680890615;
Thu, 10 Aug 2023 08:21:30 -0700 (PDT)
Received: from rltb ([2a01:e0a:3f3:fb50:b086:92d7:f1ed:48e0])
by smtp.gmail.com with ESMTPSA id
p4-20020a1c7404000000b003fe1a092925sm2422649wmc.19.2023.08.10.08.21.29
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Thu, 10 Aug 2023 08:21:29 -0700 (PDT)
From: Robert Pluim <rpluim@HIDDEN>
To: Helmut Eller <eller.helmut@HIDDEN>
Subject: Re: bug#65211: 30.0.50; threads and accept-process-output
In-Reply-To: <m21qgb2b1r.fsf@HIDDEN> (Helmut Eller's message of "Thu, 10
Aug 2023 17:04:48 +0200")
References: <m21qgb2b1r.fsf@HIDDEN>
Date: Thu, 10 Aug 2023 17:21:28 +0200
Message-ID: <87sf8q6hzb.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 65211
Cc: 65211 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
>>>>> On Thu, 10 Aug 2023 17:04:48 +0200, Helmut Eller <eller.helmut@gmail.=
com> said:
Helmut> The test case from below hangs when executed with
Helmut> emacs -Q --batch -l apo-tests.el -f ert-run-tests-batch-and-e=
xit
Helmut> It's not 100% reproducible, but it seems to hang 80% of the tim=
e.
Helmut> The test is fairly complicated and involves a TLS connection, a
Helmut> sub-process and a background thread. The background thread sta=
rts a
Helmut> sub-process and reads all its output until the process terminat=
es. Then
Helmut> the main thread opens a TLS connection, sends a HTTP request an=
d tries
Helmut> to read the response. At this point, accept-process-output han=
gs even
Helmut> though there is output available.
Helmut> I think the reason for this problem is that the sub-process use=
s a file
Helmut> descriptor (usually number 6) and sets
Helmut> fd_callback_info[6].waiting_thread to the background thread (in
Helmut> compute_non_keyboard_wait_mask) . Later, the TLS connection re=
ceives a
Helmut> file descriptor with the same number (6) because the sub-proces=
s closed
Helmut> it already. That would be fine, however
Helmut> fd_callback_info[6].waiting_thread is still set to the backgrou=
nd
Helmut> thread. So this time compute_non_keyboard_wait_mask doesn't in=
clude 6
Helmut> in the wait mask. Because 6 is not in the wait mask,
Helmut> emacs_gnutls_record_check_pending will not be called and Emacs =
doesn't
Helmut> notice the buffered output.
Helmut> The intention in the code seems to be that clear_waiting_thread=
_info
Helmut> resets fd_callback_info[6].waiting_thread to NULL, however by t=
he time
Helmut> that clear_waiting_thread_info is called, max_desc was reduced =
to 4,
Helmut> because somebody closed file descriptors 5 and 6. So
Helmut> clear_waiting_thread_info doesn't touch fd_callback_info[6].
Helmut> A possible solution would be to reset the .waiting_thread field=
in
Helmut> delete_read_fd, like so:
Helmut> diff --git a/src/process.c b/src/process.c
Helmut> index 08cb810ec13..74d0bf252ab 100644
Helmut> --- a/src/process.c
Helmut> +++ b/src/process.c
Helmut> @@ -513,6 +513,9 @@ delete_read_fd (int fd)
Helmut> {
Helmut> fd_callback_info[fd].func =3D 0;
Helmut> fd_callback_info[fd].data =3D 0;
Helmut> +
Helmut> + if (fd_callback_info[fd].waiting_thread =3D=3D current_t=
hread)
Helmut> + fd_callback_info[fd].waiting_thread =3D NULL;
Helmut> }
Helmut> }
Hmm. Maybe putting it in `deactivate_process' is better (not that I=CA=BCve
tested =F0=9F=98=BA)
Robert
--=20
bug-gnu-emacs@HIDDEN:bug#65211; Package emacs.
Full text available.
Received: (at submit) by debbugs.gnu.org; 10 Aug 2023 15:05:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Aug 10 11:05:18 2023
Received: from localhost ([127.0.0.1]:43827 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1qU7Dy-0007Rc-7n
for submit <at> debbugs.gnu.org; Thu, 10 Aug 2023 11:05:18 -0400
Received: from lists.gnu.org ([2001:470:142::17]:40436)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <eller.helmut@HIDDEN>) id 1qU7Dt-0007RH-0B
for submit <at> debbugs.gnu.org; Thu, 10 Aug 2023 11:05:16 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <eller.helmut@HIDDEN>)
id 1qU7Dn-0005K5-1z
for bug-gnu-emacs@HIDDEN; Thu, 10 Aug 2023 11:05:07 -0400
Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.90_1) (envelope-from <eller.helmut@HIDDEN>)
id 1qU7Dj-000568-0n
for bug-gnu-emacs@HIDDEN; Thu, 10 Aug 2023 11:05:06 -0400
Received: by mail-wm1-x332.google.com with SMTP id
5b1f17b1804b1-3fe1e1142caso9245735e9.0
for <bug-gnu-emacs@HIDDEN>; Thu, 10 Aug 2023 08:05:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20221208; t=1691679899; x=1692284699;
h=mime-version:message-id:date:subject:to:from:from:to:cc:subject
:date:message-id:reply-to;
bh=IZK2EG0B2I8A4f5F0huuFX5YXUnCxk/18h+ZVbeYTME=;
b=iyi7dh2tSrjTicxCPzeQmEYd5IMkF/ULo7uKwV/ddiIj963Sb9xYzoy8SOgeyNRgfh
ug8X3sFH+NQMDNZJ2NUdhrxb26EYPyQNxYrDz6n8xywO0oCuwK6bkI0Ztrjzd4KF67Z5
JYSyWpGT9TbezmSc8JoISC+LgnGG0tR9znEi5qWo0Z9p68d14+zsfpdwjvMRJgj1wsNJ
aToLCNSA3y05P2f4yis82SIzkZy9WRNzzVlRadsCbG36nc/2PFuT67LfrcDnBWEfdt6I
poEEUyGvQXFjabVNVovm7NEovSQuRYMJpizG//KoZ6YSaWJCLJZ33i3kVINx+WJ2t6wV
N+3w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20221208; t=1691679899; x=1692284699;
h=mime-version:message-id:date:subject:to:from:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=IZK2EG0B2I8A4f5F0huuFX5YXUnCxk/18h+ZVbeYTME=;
b=gpuLs1jyqik1JVfrVmto3Gi93OIKf8zRYMxmPmhRsHtQm+pgfzRX8r8koGSpXy7nwt
Ya5HH5G0MEU4WDeDvP3T/RDM+c4zo7pNqHEYh8aQXAL0zk9zYmiVEEWPYU28j6joqpvn
8G7ZdAWvGWDb3ZA7OQ03rHDpb2WJt5YgzK9ELhmYkFTs1BHDeRZqH/DhUxvLy8Vkl+Wy
g6uLYV7eMLYBJrzC73Znc1K+i8Fih2hHgRXK6FkBgb8LiOOpc6RqcpcGSXV/mQJoG30y
BFzu3F1gXVRkK9jBGuX9eYQOJHAOfvJyRkVVQ01QtCK0TJKMrpB0fCkUylMVN+Ku07Rm
b8sA==
X-Gm-Message-State: AOJu0YxouJd7KtoGSVWSUPyxD9gUsOQmjKDuUOfb6zGdP6+ukh+9GL0j
nxaE/pjzpf4J55jkoCGQzCA0HU57uCo=
X-Google-Smtp-Source: AGHT+IEFQrGrYAlxiIQ5aB3drnI2D2R56X4zgWEhK1hB8fpH6COe4nfKaqCLU1dtLoJiJm2552IzxA==
X-Received: by 2002:adf:fdc6:0:b0:317:731c:4d80 with SMTP id
i6-20020adffdc6000000b00317731c4d80mr2099441wrs.24.1691679898899;
Thu, 10 Aug 2023 08:04:58 -0700 (PDT)
Received: from caladan (dialin-228086.xdsl.raiffeisen.net. [195.254.228.86])
by smtp.gmail.com with ESMTPSA id
b13-20020adfe30d000000b003113ed02080sm2420217wrj.95.2023.08.10.08.04.58
for <bug-gnu-emacs@HIDDEN>
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Thu, 10 Aug 2023 08:04:58 -0700 (PDT)
From: Helmut Eller <eller.helmut@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 30.0.50; threads and accept-process-output
Date: Thu, 10 Aug 2023 17:04:48 +0200
Message-ID: <m21qgb2b1r.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=2a00:1450:4864:20::332;
envelope-from=eller.helmut@HIDDEN; helo=mail-wm1-x332.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)
--=-=-=
Content-Type: text/plain
The test case from below hangs when executed with
emacs -Q --batch -l apo-tests.el -f ert-run-tests-batch-and-exit
It's not 100% reproducible, but it seems to hang 80% of the time.
The test is fairly complicated and involves a TLS connection, a
sub-process and a background thread. The background thread starts a
sub-process and reads all its output until the process terminates. Then
the main thread opens a TLS connection, sends a HTTP request and tries
to read the response. At this point, accept-process-output hangs even
though there is output available.
I think the reason for this problem is that the sub-process uses a file
descriptor (usually number 6) and sets
fd_callback_info[6].waiting_thread to the background thread (in
compute_non_keyboard_wait_mask) . Later, the TLS connection receives a
file descriptor with the same number (6) because the sub-process closed
it already. That would be fine, however
fd_callback_info[6].waiting_thread is still set to the background
thread. So this time compute_non_keyboard_wait_mask doesn't include 6
in the wait mask. Because 6 is not in the wait mask,
emacs_gnutls_record_check_pending will not be called and Emacs doesn't
notice the buffered output.
The intention in the code seems to be that clear_waiting_thread_info
resets fd_callback_info[6].waiting_thread to NULL, however by the time
that clear_waiting_thread_info is called, max_desc was reduced to 4,
because somebody closed file descriptors 5 and 6. So
clear_waiting_thread_info doesn't touch fd_callback_info[6].
A possible solution would be to reset the .waiting_thread field in
delete_read_fd, like so:
diff --git a/src/process.c b/src/process.c
index 08cb810ec13..74d0bf252ab 100644
--- a/src/process.c
+++ b/src/process.c
@@ -513,6 +513,9 @@ delete_read_fd (int fd)
{
fd_callback_info[fd].func = 0;
fd_callback_info[fd].data = 0;
+
+ if (fd_callback_info[fd].waiting_thread == current_thread)
+ fd_callback_info[fd].waiting_thread = NULL;
}
}
With this change, the test doesn't hang.
Helmut
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline; filename=apo-tests.el
Content-Transfer-Encoding: quoted-printable
;; -*- lexical-binding: t -*-
(require 'ert)
(require 'gnutls)
(defun t--read (proc nchars)
"Read at least NCHARS characters from process PROC.
Return 'ok on success; otherwise return 'not-live."
(let* ((buf (process-buffer proc))
(size (+ (buffer-size buf) nchars))
(result nil))
(t--accept-process-output proc 0)
(while (eq result nil)
(cond ((>=3D (buffer-size buf) size)
(setq result 'ok))
((not (process-live-p proc))
(setq result 'not-live))
(t
(t--accept-process-output proc nil))))
result))
;; a wrapper around accept-process-output for debugging
(defun t--accept-process-output (proc timeout)
(let ((buf (process-buffer proc)))
(message "%s accept-process-output %S %s %s =E2=80=A6"
(current-thread) proc (process-status proc) timeout)
(let ((val (accept-process-output proc timeout)))
(message "%s accept-process-output %S %s %s =3D> %S %d"
(current-thread) proc (process-status proc) timeout
val (buffer-size buf))
val)))
(defun t--read-all (proc)
(while (pcase-exhaustive (t--read proc 1)
('ok t)
('not-live nil)))
(with-current-buffer (process-buffer proc)
(buffer-string)))
(defun t--make-buffer (name)
(with-current-buffer (generate-new-buffer name t)
(buffer-disable-undo)
(set-buffer-multibyte nil)
(current-buffer)))
(ert-deftest t-tls ()
(thread-join
(make-thread
(lambda ()
(let* ((proc (make-process
:name "cat"
:command (list "cat")
:sentinel (lambda (_ _))
:buffer (t--make-buffer "cat"))))
(process-send-eof proc)
(should (equal (t--read-all proc) ""))))))
(let* ((host "www.example.net")
(proc (make-network-process
:name "tls"
:host host
:service 443
:tls-parameters (cons 'gnutls-x509pki
(gnutls-boot-parameters
:hostname host))
:buffer (t--make-buffer "tls")
:sentinel (lambda (_ _))))
(request (format "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" host)))
(process-send-string proc request)
(process-send-eof proc)
(let* ((response (t--read-all proc)))
(should (string-match "^HTTP/1.1 200 OK" response)))))
;; Local Variables:
;; read-symbol-shorthands: (("t-" . "apo-tests-"))
;; End:
--=-=-=
Content-Type: text/plain
In GNU Emacs 30.0.50 (build 71, x86_64-pc-linux-gnu, GTK+ Version
3.24.37, cairo version 1.16.0) of 2023-08-10 built on caladan
Repository revision: 164588b174774eba0c3bd6999633a39bed748195
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)
Configured using:
'configure --enable-checking=yes --with-xpm=ifavailable
--with-gif=ifavailable 'CFLAGS=-g -O1''
Configured features:
CAIRO DBUS FREETYPE GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LIBSELINUX
LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND
SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 GTK3
ZLIB
Important settings:
value of $LANG: C.UTF-8
locale-coding-system: utf-8-unix
--=-=-=--
Helmut Eller <eller.helmut@HIDDEN>:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#65211; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.