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 [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]