rakshasa / rtorrent

rTorrent BitTorrent client
https://github.com/rakshasa/rtorrent/wiki
GNU General Public License v2.0
4.19k stars 415 forks source link

C Caught internal_error: 'priority_queue_insert(...) called on an invalid item.' #835

Open Sicaa opened 5 years ago

Sicaa commented 5 years ago

Seems that rtorrent (running inside a screen) randomly crashes since I migrated from 0.9.6 to 0.9.7. Here is the full stack trace :

1549144462 C Caught internal_error: 'priority_queue_insert(...) called on an invalid item.'.
---DUMP---
/usr/local/lib/libtorrent.so.20(_ZN7torrent14internal_error10initializeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x214) [0x7f06a00de2e4]
rtorrent(_ZN7torrent14internal_errorC1EPKc+0xa0) [0x55b3122aef30]
/usr/local/lib/libtorrent.so.20(+0xf1dff) [0x7f06a01a0dff]
/usr/local/lib/libtorrent.so.20(+0x2c08d) [0x7f06a00db08d]
/usr/local/lib/libtorrent.so.20(+0x2c800) [0x7f06a00db800]
/usr/local/lib/libtorrent.so.20(+0xf00c7) [0x7f06a019f0c7]
/usr/local/lib/libtorrent.so.20(+0xf2525) [0x7f06a01a1525]
/usr/local/lib/libtorrent.so.20(_ZN7torrent11TrackerList10send_stateEPNS_7TrackerEi+0x74) [0x7f06a00fccb4]
/usr/local/lib/libtorrent.so.20(_ZN7torrent17TrackerController10do_timeoutEv+0x337) [0x7f06a00fc507]
/usr/local/lib/libtorrent.so.20(+0x2b19e) [0x7f06a00da19e]
/usr/local/lib/libtorrent.so.20(_ZN7torrent11thread_base10event_loopEPS0_+0x180) [0x7f06a0136fd0]

Conf:

rtorrent conf:

method.insert = cfg.basedir, private|const|string, (cat,"/home/rtorrent/")
method.insert = cfg.watch,   private|const|string, (cat,(cfg.basedir),"watch/")
method.insert = cfg.logs,    private|const|string, (cat,(cfg.basedir),"log/")
method.insert = cfg.logfile, private|const|string, (cat,(cfg.logs),"rtorrent-",(system.time),".log")

# Creating used directories
execute.throw = bash, -c, (cat,\
    "builtin cd \"", (cfg.basedir), "\" ",\
    "&& mkdir -p .session ongoing download log watch/{load,start}")

# A single port is recommended
network.port_range.set = 62820-62820
network.port_random.set = no
network.scgi.open_port = localhost:5000

dht.mode.set = auto
dht.port.set = 62882

# Adding public DHT servers for easy bootstrapping
schedule2 = dht_node_1, 5, 0, "dht.add_node=router.utorrent.com:6881"
schedule2 = dht_node_2, 5, 0, "dht.add_node=dht.transmissionbt.com:6881"
schedule2 = dht_node_3, 5, 0, "dht.add_node=router.bitcomet.com:6881"
schedule2 = dht_node_4, 5, 0, "dht.add_node=dht.aelitis.com:6881"

protocol.pex.set = 1
trackers.use_udp.set = 1

throttle.max_uploads.set = 100
throttle.max_uploads.global.set = 250

throttle.min_peers.normal.set = 20
throttle.max_peers.normal.set = 60
throttle.min_peers.seed.set = 30
throttle.max_peers.seed.set = 80
trackers.numwant.set = 80

protocol.encryption.set = allow_incoming,try_outgoing,enable_retry

pieces.memory.max.set = 1800M
network.xmlrpc.size_limit.set = 4M

session.path.set = (cat, (cfg.basedir), ".session")

# Default directory to save the downloaded torrents.
directory.default.set = (cat, (cfg.basedir), "ongoing/")

log.execute = (cat, (cfg.logs), "execute.log")
#log.xmlrpc = (cat, (cfg.logs), "xmlrpc.log")
execute.nothrow = bash, -c, (cat, "echo >",\
    (session.path), "rtorrent.pid", " ", (system.pid))

encoding.add = utf8
system.umask.set = 0022
system.cwd.set = (directory.default)
network.http.dns_cache_timeout.set = 25
pieces.hash.on_completion.set = no
keys.layout.set = azerty
network.http.capath.set = "/etc/ssl/certs"
network.http.ssl_verify_peer.set = 0
network.http.ssl_verify_host.set = 0

# Global upload and download rate in KiB, `0` for unlimited (`download_rate`, `upload_rate`)
#upload_rate = 8192
#download_rate = 0
throttle.global_down.max_rate.set_kb = 8700
throttle.global_up.max_rate.set_kb   = 2200

# Enable the default ratio group.
group.seeding.ratio.enable=

# Upload to a minimum ratio of 1.25
group2.seeding.ratio.min.set=125

# Upload to a maximum ratio of 2.0
group2.seeding.ratio.max.set=200

# Disk space
schedule2 = monitor_diskspace, 15, 60, ((close_low_diskspace, 1000M))

# Save all the sessions in every 12 hours instead of the default 20 minutes.
schedule2 = session_save, 1200, 43200, ((session.save))

method.insert = system.startup_time, value|const, (system.time)
method.insert = d.data_path, simple,\
    "if=(d.is_multi_file),\
        (cat, (d.directory), /),\
        (cat, (d.directory), /, (d.name))"
method.insert = d.session_file, simple, "cat=(session.path), (d.hash), .torrent"

# Watch directories (add more as you like, but use unique schedule names)
# Add torrent
schedule2 = watch_load, 11, 5, ((load.verbose, (cat, (cfg.watch), "load/*.torrent")))
# Add & download straight away
schedule2 = watch_start, 10, 10, ((load.start_verbose, (cat, (cfg.watch), "start/*.torrent")))

schedule2 = tied_directory, 10, 10, start_tied=
schedule2 = untied_directory, 10, 10, stop_untied=

# Move files when download completes
method.set_key = event.download.finished,move_complete,"d.directory.set=/home/rtorrent/download/;execute2=/bin/bash,/home/rtorrent/rtorrent-post-complete.sh,$d.base_path=,/home/rtorrent/download/;d.stop=;d.start=;d.save_full_session="

# When seeding ratio is reached delete the .torrent
method.set = group.seeding.ratio.command,d.close=,d.erase=

## Logging:
##   Levels = critical error warn notice info debug
##   Groups = connection_* dht_* peer_* rpc_* storage_* thread_* tracker_* torrent_*
print = (cat, "Logging to ", (cfg.logfile))
log.open_file = "log", (cfg.logfile)
#log.add_output = "info", "log"
log.add_output = "notice", "log"
log.add_output = "warn", "log"
log.add_output = "error", "log"
log.add_output = "critical", "log"
log.add_output = "tracker_debug", "log"

rtorrent-post-complete.sh content (basically it just checks if the downloaded torrent is a single file or a directory/multiple file in order to zip it):

#!/bin/bash

if [ -d "${1}" ]; then
    cd "`dirname "${1}"`"
    zip -r -0 "`basename "${1}"`.zip" "`basename "${1}"`"
    mv -u "`basename "${1}"`.zip" ${2}
    rm -rf "${1}"
else
    #ln -s ${2}/ "${1}"
    mv -u "${1}" ${2}
fi

exit 0

Any idea of what could lead to that?

chros73 commented 5 years ago

Maybe these can help ... link , link

Sicaa commented 5 years ago

Thank you, I've already looked for solutions in these 2 threads but unfortunately it seems that my problem is caused by another reason.

I don't run ruTorrent and the error seems to tell that an invalid torrent is being queued (instead of the already queued item error).

Since multiple users can upload torrents in my web interface, I'll try to push malformed files to see if I'm able to reproduce this.

xxtensazenxx commented 2 years ago

I'm having this issue currently as well, was there any fix for you OP?

Sicaa commented 2 years ago

Nope. I have to upgrade to 0.9.8, maybe it will fix this...