From: Alain Schneble <a.s@realize.ch>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
Subject: Re: Asynchronous DNS
Date: Sun, 14 Feb 2016 00:47:27 +0100 [thread overview]
Message-ID: <86y4ao5g1c.fsf@realize.ch> (raw)
In-Reply-To: <87zivfobn4.fsf@gnus.org> (Lars Ingebrigtsen's message of "Fri, 05 Feb 2016 18:32:31 +1100")
[-- Attachment #1: Type: text/plain, Size: 634 bytes --]
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: Lars Ingebrigtsen <larsi@gnus.org>
>>>
>>> Is there a process list somewhere?
>>
>> See Vprocess_alist.
>
> Thanks. I don't know how I missed it.. It's even the next-to-last
> statement in make_process, that I thought I had read:
>
> Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
The following patch removes the separate dns_processes list in favour of
reusing Vprocess_alist. The latter list is now used to loop over all
processes -- to check if pending DNS requests have completed.
Do you agree whith this change?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Patch -- Get rid of separate dns_processes list --]
[-- Type: text/x-patch, Size: 4496 bytes --]
From 4967cb5b9f8b9342cae02ae9e2949474606a7fb3 Mon Sep 17 00:00:00 2001
From: Alain Schneble <a.s@realize.ch>
Date: Sun, 14 Feb 2016 00:21:22 +0100
Subject: [PATCH] Get rid of separate dns_processes list
* src/process.c: Remove declaration/definition of dns_processes list.
* src/process.c (wait_reading_process_output): Loop over all processes in
Vprocess_alist instead of dns_processes, to check for completed DNS
requests.
---
src/process.c | 90 ++++++++++++++++++++++-------------------------------------
1 file changed, 34 insertions(+), 56 deletions(-)
diff --git a/src/process.c b/src/process.c
index 497b069..ec123e9 100644
--- a/src/process.c
+++ b/src/process.c
@@ -281,10 +281,6 @@ static int max_input_desc;
/* Indexed by descriptor, gives the process (if any) for that descriptor. */
static Lisp_Object chan_process[FD_SETSIZE];
-#ifdef HAVE_GETADDRINFO_A
-/* Pending DNS requests. */
-static Lisp_Object dns_processes;
-#endif
/* Alist of elements (NAME . PROCESS). */
static Lisp_Object Vprocess_alist;
@@ -3881,7 +3877,6 @@ usage: (make-network-process &rest ARGS) */)
{
p->dns_requests = dns_requests;
p->status = Qconnect;
- dns_processes = Fcons (proc, dns_processes);
}
else
{
@@ -4778,51 +4773,41 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
break;
#ifdef HAVE_GETADDRINFO_A
- if (!NILP (dns_processes))
- {
- Lisp_Object dns_list = dns_processes, dns, ip_addresses,
- answers = Qnil, answer, new = Qnil;
- struct Lisp_Process *p;
-
- /* This is programmed in a somewhat awkward fashion because
- calling connect_network_socket might make us end up back
- here again, and we would have a race condition with
- segfaults. So first go through all pending requests and see
- whether we got any answers. */
- while (!NILP (dns_list))
- {
- dns = XCAR (dns_list);
- dns_list = XCDR (dns_list);
- p = XPROCESS (dns);
- if (p && p->dns_requests)
- {
- if (! wait_proc || p == wait_proc)
- {
- ip_addresses = check_for_dns (dns);
- if (EQ (ip_addresses, Qt))
- new = Fcons (dns, new);
- else
- answers = Fcons (Fcons (dns, ip_addresses), answers);
- }
- else
- new = Fcons (dns, new);
- }
- }
-
- /* Replace with the list of DNS requests still not responded
- to. */
- dns_processes = new;
+ {
+ Lisp_Object ip_addresses, answers = Qnil, answer;
+ Lisp_Object process_list_head, async_dns_process_candidate;
+ struct Lisp_Process *p;
+
+ /* This is programmed in a somewhat awkward fashion because
+ calling connect_network_socket might make us end up back
+ here again, and we would have a race condition with
+ segfaults. So first go through all pending requests and see
+ whether we got any answers. */
+ FOR_EACH_PROCESS(process_list_head, async_dns_process_candidate)
+ {
+ p = XPROCESS (async_dns_process_candidate);
+
+ if (p->dns_requests)
+ {
+ if (! wait_proc || p == wait_proc)
+ {
+ ip_addresses = check_for_dns (async_dns_process_candidate);
+ if (!EQ (ip_addresses, Qt))
+ answers = Fcons (Fcons (async_dns_process_candidate, ip_addresses), answers);
+ }
+ }
+ }
- /* Then continue the connection for the successful
- requests. */
- while (!NILP (answers))
- {
- answer = XCAR (answers);
- answers = XCDR (answers);
- if (!NILP (XCDR (answer)))
- connect_network_socket (XCAR (answer), XCDR (answer));
- }
- }
+ /* Then continue the connection for the successful
+ requests. */
+ while (!NILP (answers))
+ {
+ answer = XCAR (answers);
+ answers = XCDR (answers);
+ if (!NILP (XCDR (answer)))
+ connect_network_socket (XCAR (answer), XCDR (answer));
+ }
+ }
#endif /* HAVE_GETADDRINFO_A */
/* Compute time from now till when time limit is up. */
@@ -7684,9 +7669,6 @@ init_process_emacs (void)
#ifdef DATAGRAM_SOCKETS
memset (datagram_address, 0, sizeof datagram_address);
#endif
-#ifdef HAVE_GETADDRINFO_A
- dns_processes = Qnil;
-#endif
#if defined (DARWIN_OS)
/* PTYs are broken on Darwin < 6, but are sometimes useful for interactive
@@ -7774,10 +7756,6 @@ syms_of_process (void)
staticpro (&Vprocess_alist);
staticpro (&deleted_pid_list);
-#ifdef HAVE_GETADDRINFO_A
- staticpro (&dns_processes);
-#endif
-
#endif /* subprocesses */
DEFSYM (QCname, ":name");
--
2.6.2.windows.1
next prev parent reply other threads:[~2016-02-13 23:47 UTC|newest]
Thread overview: 190+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-23 13:50 Asynchronous DNS Lars Magne Ingebrigtsen
2016-01-23 14:56 ` Elias Mårtenson
2016-01-24 21:17 ` Lars Magne Ingebrigtsen
2016-01-25 8:58 ` Elias Mårtenson
2016-01-25 15:51 ` Eli Zaretskii
2016-01-25 17:15 ` Elias Mårtenson
2016-01-25 17:26 ` Eli Zaretskii
2016-01-23 21:42 ` Paul Eggert
2016-01-24 13:53 ` Lars Magne Ingebrigtsen
2016-01-24 14:01 ` Lars Magne Ingebrigtsen
2016-01-24 14:14 ` Lars Magne Ingebrigtsen
2016-01-24 19:58 ` Paul Eggert
2016-01-24 4:49 ` Stefan Monnier
2016-01-24 13:56 ` Lars Magne Ingebrigtsen
2016-01-24 17:16 ` Lars Magne Ingebrigtsen
2016-01-25 2:06 ` Stefan Monnier
2016-01-26 19:48 ` John Wiegley
2016-01-26 22:05 ` Florian Weimer
2016-01-30 0:11 ` Lars Ingebrigtsen
2016-01-30 2:39 ` Alex Dunn
2016-01-30 2:58 ` Lars Ingebrigtsen
2016-01-30 4:11 ` Alex Dunn
2016-01-30 4:34 ` Lars Ingebrigtsen
2016-02-01 3:55 ` Lars Ingebrigtsen
2016-01-30 7:23 ` Eli Zaretskii
2016-01-30 7:46 ` Lars Ingebrigtsen
2016-01-30 8:46 ` Eli Zaretskii
2016-01-30 22:46 ` Lars Ingebrigtsen
2016-01-31 6:12 ` Ken Raeburn
2016-02-01 2:46 ` Lars Ingebrigtsen
2016-01-31 14:03 ` Andy Moreton
2016-02-01 2:08 ` Lars Ingebrigtsen
2016-02-01 2:36 ` Lars Ingebrigtsen
2016-02-01 18:51 ` Eli Zaretskii
2016-02-02 1:15 ` Lars Ingebrigtsen
2016-02-02 3:38 ` Eli Zaretskii
2016-02-02 3:48 ` Lars Ingebrigtsen
2016-02-02 13:25 ` Stefan Monnier
2016-02-02 16:24 ` Eli Zaretskii
2016-02-02 17:11 ` Stefan Monnier
2016-02-02 16:12 ` Eli Zaretskii
2016-02-03 0:42 ` Lars Ingebrigtsen
2016-02-03 15:49 ` Eli Zaretskii
2016-02-04 2:22 ` Lars Ingebrigtsen
2016-02-04 8:18 ` Alain Schneble
2016-02-04 8:55 ` Lars Ingebrigtsen
2016-02-04 10:13 ` Alain Schneble
2016-02-05 2:08 ` Lars Ingebrigtsen
2016-02-05 7:19 ` Eli Zaretskii
2016-02-05 7:32 ` Lars Ingebrigtsen
2016-02-13 23:47 ` Alain Schneble [this message]
2016-02-14 2:22 ` Lars Ingebrigtsen
2016-02-14 11:19 ` Alain Schneble
2016-02-14 16:40 ` Eli Zaretskii
2016-02-16 21:37 ` Alain Schneble
2016-02-20 1:28 ` Lars Ingebrigtsen
2016-02-20 17:55 ` Paul Eggert
2016-02-20 20:18 ` Alain Schneble
2016-02-20 20:33 ` Paul Eggert
2016-02-21 10:29 ` Alain Schneble
2016-02-26 23:54 ` YAMAMOTO Mitsuharu
2016-02-27 3:57 ` Lars Ingebrigtsen
2016-02-27 9:22 ` Alain Schneble
2016-02-28 4:43 ` Lars Ingebrigtsen
2016-02-28 9:44 ` Andreas Schwab
2016-02-29 2:59 ` Lars Ingebrigtsen
2016-02-29 3:30 ` Lars Ingebrigtsen
2016-02-29 8:41 ` Andreas Schwab
2016-02-20 19:31 ` Alain Schneble
2016-02-20 19:57 ` Alain Schneble
2016-02-21 2:36 ` Lars Ingebrigtsen
2016-02-21 3:03 ` Lars Ingebrigtsen
2016-02-21 18:55 ` Alain Schneble
2016-02-21 20:23 ` Eli Zaretskii
2016-02-22 2:15 ` Lars Ingebrigtsen
2016-02-22 3:39 ` Eli Zaretskii
2016-02-22 4:03 ` Lars Ingebrigtsen
2016-02-22 5:45 ` Lars Ingebrigtsen
2016-02-22 2:07 ` Lars Ingebrigtsen
2016-02-24 6:26 ` Lars Ingebrigtsen
2016-02-24 6:29 ` Paul Eggert
2016-02-24 6:52 ` Lars Ingebrigtsen
2016-02-24 8:27 ` John Wiegley
2016-02-21 19:35 ` Alain Schneble
2016-02-22 2:01 ` Lars Ingebrigtsen
2016-02-20 10:57 ` Eli Zaretskii
2016-02-16 2:09 ` Lars Ingebrigtsen
2016-02-05 9:37 ` Alain Schneble
2016-02-04 16:30 ` Eli Zaretskii
2016-02-05 2:31 ` Lars Ingebrigtsen
2016-02-05 7:20 ` Eli Zaretskii
2016-02-03 2:49 ` Lars Ingebrigtsen
2016-02-02 6:41 ` Alain Schneble
2016-02-02 7:06 ` Lars Ingebrigtsen
2016-02-02 7:49 ` Alain Schneble
2016-02-02 21:27 ` Alain Schneble
2016-02-03 0:22 ` Lars Ingebrigtsen
2016-02-03 10:22 ` Yuri Khan
2016-02-04 0:18 ` Lars Ingebrigtsen
2016-02-01 11:58 ` Andy Moreton
2016-02-01 19:10 ` Eli Zaretskii
2016-02-01 22:18 ` Andy Moreton
2016-02-02 1:54 ` Lars Ingebrigtsen
2016-02-02 2:05 ` YAMAMOTO Mitsuharu
2016-02-02 2:18 ` Lars Ingebrigtsen
2016-02-02 3:42 ` Eli Zaretskii
2016-02-03 0:50 ` Lars Ingebrigtsen
2016-02-03 2:43 ` Lars Ingebrigtsen
2016-02-03 15:50 ` Eli Zaretskii
2016-02-04 2:25 ` Lars Ingebrigtsen
2016-02-04 16:31 ` Eli Zaretskii
2016-02-05 2:32 ` Lars Ingebrigtsen
2016-02-05 7:21 ` Eli Zaretskii
2016-02-05 7:33 ` Lars Ingebrigtsen
2016-02-06 7:49 ` Lars Ingebrigtsen
2016-02-06 8:19 ` Eli Zaretskii
2016-02-07 0:34 ` Alain Schneble
2016-02-07 1:38 ` Lars Ingebrigtsen
2016-02-07 11:41 ` Alain Schneble
2016-02-07 19:16 ` Eli Zaretskii
2016-02-07 20:24 ` Alain Schneble
2016-02-08 1:55 ` Lars Ingebrigtsen
2016-02-08 3:40 ` Lars Ingebrigtsen
2016-02-08 7:40 ` Alain Schneble
2016-02-08 7:52 ` Lars Ingebrigtsen
2016-02-08 8:10 ` Alain Schneble
2016-02-09 0:37 ` Lars Ingebrigtsen
2016-02-09 9:02 ` Alain Schneble
2016-02-09 13:46 ` Lars Ingebrigtsen
2016-02-09 17:00 ` Eli Zaretskii
2016-02-09 20:43 ` Alain Schneble
2016-02-09 20:48 ` Eli Zaretskii
2016-02-09 23:22 ` Lars Ingebrigtsen
2016-02-10 10:39 ` Alain Schneble
2016-02-12 2:15 ` Lars Ingebrigtsen
2016-02-12 10:12 ` Alain Schneble
2016-02-13 4:04 ` Lars Ingebrigtsen
2016-02-13 10:16 ` Alain Schneble
2016-02-14 2:20 ` Lars Ingebrigtsen
2016-02-14 5:56 ` Eli Zaretskii
2016-02-14 7:01 ` Lars Ingebrigtsen
2016-02-14 13:56 ` Stefan Monnier
2016-02-15 0:19 ` Alain Schneble
2016-02-15 4:22 ` Lars Ingebrigtsen
2016-02-14 16:32 ` Eli Zaretskii
2016-02-15 0:14 ` Alain Schneble
2016-02-15 3:41 ` Eli Zaretskii
2016-02-15 4:30 ` Lars Ingebrigtsen
2016-02-15 0:02 ` Alain Schneble
2016-02-15 4:39 ` Lars Ingebrigtsen
2016-02-15 6:14 ` Lars Ingebrigtsen
2016-02-15 6:25 ` Lars Ingebrigtsen
2016-02-15 10:55 ` Eli Zaretskii
2016-02-15 12:01 ` Andreas Schwab
2016-02-15 13:50 ` Eli Zaretskii
2016-02-16 2:26 ` Lars Ingebrigtsen
2016-02-15 10:50 ` Eli Zaretskii
2016-02-15 11:06 ` Alain Schneble
2016-02-15 13:49 ` Eli Zaretskii
2016-02-15 15:04 ` Alain Schneble
2016-02-15 16:40 ` Alain Schneble
2016-02-16 2:13 ` Lars Ingebrigtsen
2016-02-16 6:48 ` Alain Schneble
2016-02-15 18:13 ` Alain Schneble
2016-02-12 10:35 ` Andreas Schwab
2016-02-12 11:37 ` Alain Schneble
2016-02-08 18:11 ` Eli Zaretskii
2016-02-09 0:47 ` Lars Ingebrigtsen
2016-02-09 16:56 ` Eli Zaretskii
2016-02-08 10:43 ` Andreas Schwab
2016-02-08 11:55 ` Alain Schneble
2016-02-08 12:55 ` Andreas Schwab
2016-02-08 14:25 ` Alain Schneble
2016-02-08 14:31 ` Andreas Schwab
2016-02-09 0:40 ` Lars Ingebrigtsen
2016-02-09 9:15 ` Alain Schneble
2016-02-09 9:35 ` Alain Schneble
2016-02-07 15:55 ` Eli Zaretskii
2016-02-07 17:45 ` Alain Schneble
2016-02-08 2:03 ` Lars Ingebrigtsen
2016-02-08 15:56 ` John Wiegley
2016-02-08 20:30 ` Rasmus
2016-02-09 0:34 ` Lars Ingebrigtsen
2016-02-08 18:22 ` Eli Zaretskii
2016-02-07 1:35 ` Lars Ingebrigtsen
2016-02-07 16:07 ` Eli Zaretskii
2016-02-08 2:05 ` Lars Ingebrigtsen
2016-02-08 18:20 ` Eli Zaretskii
2016-02-07 17:27 ` John Wiegley
2016-02-08 1:26 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86y4ao5g1c.fsf@realize.ch \
--to=a.s@realize.ch \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=larsi@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.