emacs-devel
[Top][All Lists]
Advanced

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

Re: Rendering regression in Gnus with gnus-treat-from-gravatar


From: Tassilo Horn
Subject: Re: Rendering regression in Gnus with gnus-treat-from-gravatar
Date: Wed, 22 Apr 2020 16:25:34 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Robert Pluim <address@hidden> writes:

Hi Robert and Adam,

>     Adam> Robert writes:
>     >> The new version doesnʼt do any more gravatar lookups than the
>     >> old one, but it does by default do some DNS lookups. Is it
>     >> better if you customize 'gravatar-service' to one of the other
>     >> options?
>
>     Adam> Of the three possible options for gravatar-service:
>     Adam> gravatar, unicornify, libravatar only the last, and default,
>     Adam> libravatar exhibits the problem.
>
> OK, so itʼs the DNS. The libravatar method does a bunch of DNS
> queries, and those can be slow, and they're done for every article.

I have the same problem as Adam.  And it happened two or three times
that upon clicking a message, Emacs started consuming 100% CPU and stuck
at least 30 seconds before I hit C-g.  At one occurrence, I attached GDB
after waiting at least 30 seconds for the full message to appear and on
the bottom of the call stack was

  dns-query
  accept-process-output

Hm, that must be that while loop in dns-query but given the values of
step and times, I cannot see how that could block for so long.  And
usually, it doesn't.

And in the ususal case, it is just slow in the sense of maybe 2-5
seconds.  And in those normal cases, it's not so much the dns query but
the TLS negotiation with seccdn.libravatar.org (in case the DNS lookup
found no custom gravatar url).

Here's a profiler report gathered with:

(progn
  (profiler-start 'cpu)
  (gravatar-retrieve-synchronously "address@hidden")
  (profiler-report)
  (profiler-stop))

--8<---------------cut here---------------start------------->8---
- command-execute                                                  33 100%
 - call-interactively                                              33 100%
  - funcall-interactively                                          33 100%
   - eval-last-sexp                                                33 100%
    - elisp--eval-last-sexp                                        33 100%
     - eval                                                        33 100%
      - progn                                                      33 100%
       - progn                                                     33 100%
        - gravatar-retrieve-synchronously                          32  96%
         - let                                                     32  96%
          - save-current-buffer                                    25  75%
           - set-buffer                                            25  75%
            - if                                                   25  75%
             - url-retrieve-synchronously                          25  75%
              - url-retrieve                                       24  72%
               - url-retrieve-internal                             24  72%
                - url-https                                        24  72%
                 - url-http                                        24  72%
                  - url-http-find-free-connection                  24  72%
                   - url-open-stream                               24  72%
                    - open-network-stream                          24  72%
                     - network-stream-open-tls                     24  72%
                      - open-gnutls-stream                         24  72%
                       - gnutls-negotiate                          24  72%
                        - gnutls-boot-parameters                    1   3%
                         - gnutls-trustfiles                        1   3%
                          - gnutls--get-files                       1   3%
                             file-expand-wildcards                  1   3%
              + accept-process-output                               1   3%
          - gravatar-build-url                                      7  21%
           - format                                                 7  21%
            - funcall                                               7  21%
             - gravatar--service-libravatar                         7  21%
              - let                                                 7  21%
               - unwind-protect                                     7  21%
                - progn                                             7  21%
                 - if                                               7  21%
                  - let                                             7  21%
                   - catch                                          7  21%
                    - let                                           7  21%
                     - while                                        7  21%
                      - let                                         7  21%
                       - let*                                       7  21%
                        - dns-query                                 7  21%
                         - sit-for                                  6  18%
                            redisplay                               3   9%
                            read-event                              3   9%
--8<---------------cut here---------------end--------------->8---

Bye,
Tassilo



reply via email to

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