Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Sicaa opened this issue Feb 5, 2019 · 4 comments

Comments

@Sicaa
Copy link

Sicaa commented Feb 5, 2019

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:

  • Debian 9 server (uname -a: Linux phoenix 4.9.0-8-amd64 #⁠1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux)
  • Filesystem: ext4
  • Front end: custom PHP-based shared seedbox (not ruTorrent). Simple XMLRPC requests to retrieve torrent informations.

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
Copy link
Contributor

chros73 commented Feb 7, 2019

Maybe these can help ...
link , link

@Sicaa
Copy link
Author

Sicaa commented Feb 7, 2019

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

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

@Sicaa
Copy link
Author

Sicaa commented Feb 7, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants