26.06.2012 в 00:59:50 +0200 Benoît Knecht написал: > Benoît Knecht wrote: > > Stepan Golosunov wrote: > > > rtorrent 0.8.6-1 used to be crashing every several weeks for > > > me. (Though I do not actually remember whether there were > > > std::bad_alloc messages. I thought so but several recent crashes in > > > squeeze had basic_string::resize messages.) > > > > > > After upgrading to wheezy rtorrent started to crash much more > > > often. Either immediately after start or about half an hour later, > > > often with the messed up *** glibc detected *** rtorrent: corrupted > > > double-linked list: 0x094c7a18 *** messages, requiring reset in the > > > terminal to get readable output from any subsequent command. > > > > > > Running rtorrent under valgrind appears to prevent crashes. > > > > > > After recompiling libtorrent 0.12.9-3 with DEB_BUILD_OPTIONS=nostrip > > > I get the following: > > > > > > [...] > > > > I've been running rtorrent/libtorrent 0.8.9/0.12.9 for months without > > such problems, but I don't use DHT and you apparently do. So just to see > > what might be the differences, could you please post your rtorrent.rc? > > If you have anything unusual in there, maybe you could try and see if > > the crash happens with a minimal rtorrent.rc too. > > rtorrent 0.9.2 and libtorrent 0.13.2 are now in testing, could you give > them a try and report back here on the result? Also consider what I > mentioned above about rtorrent.rc.
rtorrent 0.9.2-1 crashed upon start several times when I tried it couple of weeks ago. (Today it did not crash yet, but this seems to be the usual behavior when I am trying to reproduce crash for the bug report.) By the way, changes like this in libtorrent's configure look suspicious: int main() { - struct kevent ev[2], ev_out[2]; + struct kevent ev2, ev_out2; struct timespec ts = { 0, 0 }; - int pfd[2], pty[2], kfd, n; - char buffer[9001]; + int pfd2, pty2, kfd, n; + char buffer9001; if (pipe(pfd) == -1) return 1; - if (fcntl(pfd[1], F_SETFL, O_NONBLOCK) == -1) return 2; - while ((n = write(pfd[1], buffer, sizeof(buffer))) == sizeof(buffer)); - if ((pty[0]=posix_openpt(O_RDWR | O_NOCTTY)) == -1) return 3; - if ((pty[1]=grantpt(pty[0])) == -1) return 4; - EV_SET(ev+0, pfd[1], EVFILT_WRITE, EV_ADD | EV_ENABLE, 0, 0, NULL); - EV_SET(ev+1, pty[1], EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL); + if (fcntl(pfd1, F_SETFL, O_NONBLOCK) == -1) return 2; + while ((n = write(pfd1, buffer, sizeof(buffer))) == sizeof(buffer)); + if ((pty0=posix_openpt(O_RDWR | O_NOCTTY)) == -1) return 3; + if ((pty1=grantpt(pty0)) == -1) return 4; + EV_SET(ev+0, pfd1, EVFILT_WRITE, EV_ADD | EV_ENABLE, 0, 0, NULL); + EV_SET(ev+1, pty1, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL); if ((kfd = kqueue()) == -1) return 5; if ((n = kevent(kfd, ev, 2, NULL, 0, NULL)) == -1) return 6; - if (ev_out[0].flags & EV_ERROR) return 7; - if (ev_out[1].flags & EV_ERROR) return 8; - read(pfd[0], buffer, sizeof(buffer)); + if (ev_out0.flags & EV_ERROR) return 7; + if (ev_out1.flags & EV_ERROR) return 8; + read(pfd0, buffer, sizeof(buffer)); + if ((n = kevent(kfd, NULL, 0, ev_out, 2, &ts)) < 1) return 9; + return 0; + } All brackets around array indexes are lost in c snippets. My .rtorrent.rc contains this: bind = … port_range = …-… #port_range = …-… check_hash = yes directory = "…" http_proxy = "" encoding_list = "utf-8" encryption = allow_incoming,try_outgoing peer_exchange = yes session = "…" dht = auto dht_port = … There are usually several dozens of torrents from jamendo in the session directory. -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org