<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class="">   We have experienced several crashes in Avahi, 0.6.31, running CentOS 7.8.   The crash dump is in avahi library.  This is what I see from gdb.</div><div class=""><br class=""></div><div class="">===============</div><div class=""><div class="">(gdb) bt</div><div class="">#0  0x00007f5d83300387 in raise () from /lib64/libc.so.6</div><div class="">#1  0x00007f5d83301a78 in abort () from /lib64/libc.so.6</div><div class="">#2  0x00007f5d832f91a6 in __assert_fail_base () from /lib64/libc.so.6</div><div class="">#3  0x00007f5d832f9252 in __assert_fail () from /lib64/libc.so.6</div><div class="">#4  0x00007f5d7c54dc0e in avahi_simple_poll_dispatch () from /lib64/libavahi-common.so.3</div><div class="">#5  0x00007f5d7c54debd in avahi_simple_poll_loop () from /lib64/libavahi-common.so.3</div><div class="">#6  0x00007f5d7c54df84 in thread () from /lib64/libavahi-common.so.3</div><div class="">#7  0x00007f5d842c7ea5 in start_thread () from /lib64/libpthread.so.0</div><div class="">#8  0x00007f5d833c88dd in clone () from /lib64/libc.so.6</div></div><div class="">===============</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">I downloaded the source code of that version and annotated the stack far,es. There are four asserts in avahi_simple_poll_dispatch().  It is hard to tell which one triggers the accept.</div><div class="">The first one does not seem to be an issue since 'assert(s)' is also called in avahi_simple_poll_loop() in frame #5.</div><div class=""><br class=""></div><div class="">Any help is appreciated.</div><div class=""><br class=""></div><div class="">Thanks</div><div class=""><br class=""></div><div class="">Alex</div><div class=""><br class=""></div><div class="">===========</div><div class=""><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#0  0x00007f5d83300387 in raise () from /lib64/libc.so.6</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#1  0x00007f5d83301a78 in abort () from /lib64/libc.so.6</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#2  0x00007f5d832f91a6 in __assert_fail_base () from /lib64/libc.so.6</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#3  0x00007f5d832f9252 in __assert_fail () from /lib64/libc.so.6</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">avahi-common/simple-watch.c</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 13px;" class=""><b class=""></b><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">int avahi_simple_poll_dispatch(AvahiSimplePoll *s) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    AvahiTimeout *next_timeout;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    AvahiWatch *w;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">  <b class=""> </b><b class=""> assert(s);</b></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">   <b class=""> </b><b class="">assert(s->state == STATE_RAN);</b></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    s->state = STATE_DISPATCHING;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    /* We execute only on callback in every iteration */</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    /* Check whether the wakeup time has been reached now */</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    if ((next_timeout = find_next_timeout(s))) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        if (next_timeout->expiry.tv_sec == 0 && next_timeout->expiry.tv_usec == 0) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            /* Just a shortcut so that we don't need to call gettimeofday() */</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            timeout_callback(next_timeout);</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            goto finish;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        }</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        if (avahi_age(&next_timeout->expiry) >= 0) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            /* Timeout elapsed */</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            timeout_callback(next_timeout);</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            goto finish;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        }</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    }</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    /* Look for some kind of I/O event */</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    for (w = s->watches; w; w = w->watches_next) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        if (w->dead)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            continue;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">      <b class="">  </b><b class="">assert(w->idx >= 0);</b></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        <b class="">assert(w->idx < s->n_pollfds);</b></div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        if (s->pollfds[w->idx].revents != 0) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            w->callback(w, w->pollfd.fd, s->pollfds[w->idx].revents, w->userdata);</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            goto finish;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        }</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    }</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">finish:</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    s->state = STATE_DISPATCHED;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    return 0;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">}</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#4  0x00007f5d7c54dc0e in avahi_simple_poll_dispatch () from /lib64/libavahi-common.so.3</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">avahi-common/simple-watch.c</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 13px;" class=""><b class=""></b><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">int avahi_simple_poll_loop(AvahiSimplePoll *s) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    int r;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    assert(s);</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    for (;;)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        if ((r = avahi_simple_poll_iterat<b class="">e</b>(s, -1)) != 0)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">            if (r >= 0 || errno != EINTR)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">                return r;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">}</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">int avahi_simple_poll_iterate(AvahiSimplePoll *s, int timeout) {</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    int r;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    if ((r = avahi_simple_poll_prepare(s, timeout)) != 0)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        return r;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    if ((r = avahi_simple_poll_run(s)) != 0)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        return r;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    if ((r = avahi_simple_poll_dispatch(s)) != 0)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">        return r;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    return 0;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">}</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#5  0x00007f5d7c54debd in avahi_simple_poll_loop<b class=""> </b>()  from /lib64/libavahi-common.so.3</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">avahi-common/thread-watch.c</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">static void* <b class="">thread</b>(void *userdata){</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    AvahiThreadedPoll *p = userdata;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    sigset_t mask;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    /* Make sure that signals are delivered to the main thread */</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    sigfillset(&mask);</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    pthread_sigmask(SIG_BLOCK, &mask, NULL);</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    pthread_mutex_lock(&p->mutex);</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    p->retval = avahi_simple_poll_loop(p->simple_poll);</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    pthread_mutex_unlock(&p->mutex);</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">    return NULL;</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">}</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#6  0x00007f5d7c54df84 in thread<b class=""> ()</b> from /lib64/libavahi-common.so.3</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#7  0x00007f5d842c7ea5 in start_thread () from /lib64/libpthread.so.0</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">#8  0x00007f5d833c88dd in clone () from /lib64/libc.so.6</div><div style="margin: 0px; font-stretch: normal; line-height: normal; min-height: 12px;" class=""><br class=""></div></div><div class=""><div class=""><br class=""></div><div class=""><div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div><br class=""></div></div></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<br class=""></div></body></html>