<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>