icecc / icecream

Distributed compiler with a central scheduler to share build load
GNU General Public License v2.0
1.58k stars 248 forks source link

occasional scheduler segfault #629

Open jimis opened 6 months ago

jimis commented 6 months ago

It happens rarely. Stacktrace:

(gdb) bt
#0  0x00007fbe862d3d54 in std::_Rb_tree_increment(std::_Rb_tree_node_base const*) () from /lib64/libstdc++.so.6
#1  0x00005651c2ff858d in std::_Rb_tree_const_iterator<std::pair<int const, CompileServer*> >::operator++ (this=<synthetic pointer>)
    at /usr/include/c++/13/bits/stl_tree.h:366
#2  main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/icecc-1.4.0/scheduler/scheduler.cpp:2384

Source code:

#2  main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/icecc-1.4.0/scheduler/scheduler.cpp:2384
2384                ++it;
(gdb) l
2379                int i = it->first;
2380                CompileServer *cs = it->second;
2381                /* handle_activity can delete the channel from the fd2cs list,
2382                   hence advance the iterator right now, so it doesn't become
2383                   invalid.  */
2384                ++it;
2385
2386                if (pollfd_is_set(pollfds, i, POLLIN)) {
2387                    while (!cs->read_a_bit() || cs->has_msg()) {
2388                        if (!handle_activity(cs)) {

Version:

$ rpm -qf /usr/sbin/icecc-scheduler 
icecream-1.4.0-2.7.x86_64

OS is OpenSUSE-Tumbleweed.