• Thomas Haller's avatar
    connectivity: avoid busy looping with connectivity-check failed · 884a28b2
    Thomas Haller authored
    It seems, curl_multi_socket_action() can fail with
    
      connectivity check failed: 4
    
    where "4" means CURLM_INTERNAL_ERROR.
    
    When that happens, it also seems that the file descriptor may still have data
    to read, so the glib IO callback _con_curl_socketevent_cb() will be called in
    an endless loop. Thereby, keeping the CPU busy with doing nothing (useful).
    
    Workaround by disabling polling on the file descriptor when something
    goes wrong.
    
    Note that optimally we would cancel the affected connectivity-check
    right away. However, due to the design of libcurl's API, from within
    _con_curl_socketevent_cb() we don't know which connectivity-checks
    are affected by a failure on this file descriptor. So, all we can do
    is avoid polling on the (possibly) broken file descriptor. Note that
    we anyway always schedule a timeout of last resort for each check. Even
    if something goes very wrong, we will fail the check within 15 seconds.
    
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903996
    884a28b2
Name
Last commit
Last update
clients Loading commit data...
contrib Loading commit data...
data Loading commit data...
dispatcher Loading commit data...
docs Loading commit data...
examples Loading commit data...
introspection Loading commit data...
libnm Loading commit data...
libnm-core Loading commit data...
libnm-glib Loading commit data...
libnm-util Loading commit data...
m4 Loading commit data...
man Loading commit data...
po Loading commit data...
shared Loading commit data...
src Loading commit data...
tools Loading commit data...
vapi Loading commit data...
.dir-locals.el Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING Loading commit data...
COPYING Loading commit data...
ChangeLog Loading commit data...
MAINTAINERS Loading commit data...
Makefile.am Loading commit data...
Makefile.examples Loading commit data...
Makefile.glib Loading commit data...
Makefile.vapigen Loading commit data...
NEWS Loading commit data...
NetworkManager.pc.in Loading commit data...
README Loading commit data...
TODO Loading commit data...
autogen.sh Loading commit data...
config-extra.h.meson Loading commit data...
config.h.meson Loading commit data...
configure.ac Loading commit data...
linker-script-binary.ver Loading commit data...
linker-script-devices.ver Loading commit data...
linker-script-settings.ver Loading commit data...
meson.build Loading commit data...
meson_options.txt Loading commit data...
meson_post_install.py Loading commit data...
valgrind.suppressions Loading commit data...
zanata.xml Loading commit data...