anacrolix / anacrolix/torrent

TorrServer crash with anacrolix/torrent@master

Abierto
#1,035 3 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Go
Estrellas
6.1k
Forks
690
Merge medio
3 d 10 h
PR fusionados (30 d)
12

Descripción

Hi, @anacrolix!
I have new attemt to adopt TorrServer to current library. In general it works great, but there is few issues:

1st one - torrent spam syslog with ReadAt errors when reading of closed torrent. I muted https://github.com/YouROK/TorrServer/commit/21443adb01404d7f08f72a59e24aa89b2c2ab719#diff-542ab524afe879ecc784528fcd59a5cd3851df12a5585f434bb43427dde7f235 such messages with custom Slogger implementation: https://github.com/YouROK/TorrServer/blob/44077202e34d04fd85dd38fdf1699497735c53a0/server/log/log.go#L125-L197. This stop spamming of syslog to hundred of GB but looks like doesn't help avoid crashes with stack overflow.

And even with null slog from library I have stack overflow in reader waitAvailable:

[reader-waitAvailable-stack-overflow.txt](https://github.com/user-attachments/files/24113256/reader-waitAvailable-stack-overflow.txt)

[full-crash-log.txt](https://github.com/user-attachments/files/24113444/full-crash-log.txt)

This is our preload readers implementation: https://github.com/YouROK/TorrServer/blob/new-engine/server/torr/preload.go
There is check of closed torrent before readers start https://github.com/YouROK/TorrServer/blob/44077202e34d04fd85dd38fdf1699497735c53a0/server/torr/preload.go#L87-L90, but situation when user cancels preload and readers are still active also possible.

Also, there is panic on some trackers when AddToorentSpec:

```
2025/12/17 02:14:02 New torrent e6e71c1093932619dbd8d260cae3f6f57ac1c2b1
panic: unknown scheme

goroutine 66481 [running]:
github.com/anacrolix/missinggo/v2/panicif.Err(...)
github.com/anacrolix/missinggo/v2@v2.10.0/panicif/panicif.go:49
github.com/anacrolix/torrent.(*regularTrackerAnnounceDispatcher).initTrackerClient(0x3cf0d40, 0x5a10050, {0x580ca38, 0x18}, 0x3d41208, {{0x1, {0x0, 0x0, 0x0}, {0x0, ...}, ...}})
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/client-tracker-announcer.go:857 +0x4b4
github.com/anacrolix/torrent.(*Client).startTrackerAnnouncer(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/client-tracker-announcer.go:784
github.com/anacrolix/torrent.(*Torrent).startScrapingTrackerWithInfohash.func1(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:2212
github.com/anacrolix/torrent.(*Torrent).startScrapingTrackerWithInfohash(0x4bbeb08, 0x5a10050, {0x580ca38, 0x18}, {0xe6, 0xe7, 0x1c, 0x10, 0x93, 0x93, ...})
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:2220 +0x268
github.com/anacrolix/torrent.(*Torrent).startScrapingTracker-range1(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:2184
github.com/anacrolix/torrent.(*Torrent).startScrapingTracker.(*Torrent).startScrapingTracker.(*Torrent).iterShortInfohashes.func1.func2(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:3578
github.com/anacrolix/torrent.(*Torrent).eachShortInfohash(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:3590
github.com/anacrolix/torrent.(*Torrent).startScrapingTracker.(*Torrent).iterShortInfohashes.func1(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:3577
github.com/anacrolix/torrent.(*Torrent).startScrapingTracker(0x4bbeb08, {0x580ca38, 0x18})
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:2183 +0x290
github.com/anacrolix/torrent.(*Torrent).startMissingTrackerScrapers(...)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:2246
github.com/anacrolix/torrent.(*Torrent).addTrackers(0x4bbeb08, {0x5992810, 0x3, 0x4})
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/torrent.go:1925 +0x2d8
github.com/anacrolix/torrent.(*Torrent).MergeSpec(0x4bbeb08, 0x4c2fdf4)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/client.go:1614 +0x214
github.com/anacrolix/torrent.(*Client).AddTorrentSpec(0x3cf0a08, 0x6656f28)
github.com/anacrolix/torrent@v1.60.1-0.20251211072636-e5b675eaffd2/client.go:1570 +0x74
server/torr.NewTorrent(0x6656f28, 0x3e61770)
server/torr/torrent.go:77 +0x3d8
server/torr.GetTorrent.func1()
server/torr/apihelper.go:105 +0x16c
created by server/torr.GetTorrent in goroutine 37414
server/torr/apihelper.go:103 +0x190
```
with
```
func NewTorrent(spec *torrent.TorrentSpec, bt *BTServer) (*Torrent, error) {
// https://github.com/anacrolix/torrent/issues/747
if bt == nil || bt.client == nil {
return nil, errors.New("BT client not connected")
}
switch settings.BTsets.RetrackersMode {
case 1:
spec.Trackers = append(spec.Trackers, [][]string{utils.GetDefTrackers()}...)
case 2:
spec.Trackers = nil
case 3:
spec.Trackers = [][]string{utils.GetDefTrackers()}
}

trackers := utils.GetTrackerFromFile()
if len(trackers) > 0 {
spec.Trackers = append(spec.Trackers, [][]string{trackers}...)
}

goTorrent, _, err := bt.client.AddTorrentSpec(spec)
if err != nil {
return nil, err
}
...
```
Do you have any thoughts how to fix such things in proper way? ;-)

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.