mirror of
https://github.com/rumanzo/bt2qbt.git
synced 2024-11-10 04:42:37 +01:00
Fix incorrect counting of tasks in the utorrent 2.X that caused gorutine deadlock in some cases.
This commit is contained in:
parent
a3beacbd5a
commit
ad4036291b
10
bt2qbt.go
10
bt2qbt.go
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"bytes"
|
||||||
"crypto/sha1"
|
"crypto/sha1"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -20,7 +21,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
"bytes"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func ASCIIconvert(s string) string {
|
func ASCIIconvert(s string) string {
|
||||||
@ -378,7 +378,7 @@ func logic(key string, value map[string]interface{}, bitdir *string, with_label
|
|||||||
qbitdir *string, comChannel chan string, errChannel chan string, position int, wg *sync.WaitGroup, boundedChannel chan bool) error {
|
qbitdir *string, comChannel chan string, errChannel chan string, position int, wg *sync.WaitGroup, boundedChannel chan bool) error {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
defer func() {
|
defer func() {
|
||||||
<- boundedChannel
|
<-boundedChannel
|
||||||
}()
|
}()
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
@ -534,14 +534,14 @@ func main() {
|
|||||||
fmt.Println("Press Enter to start")
|
fmt.Println("Press Enter to start")
|
||||||
fmt.Scanln()
|
fmt.Scanln()
|
||||||
log.Println("Started")
|
log.Println("Started")
|
||||||
totaljobs := len(resumefile) - 2
|
totaljobs := len(resumefile)
|
||||||
numjob := 1
|
numjob := 1
|
||||||
var oldtags string
|
var oldtags string
|
||||||
var newtags []string
|
var newtags []string
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
comChannel := make(chan string, totaljobs)
|
comChannel := make(chan string, totaljobs)
|
||||||
errChannel := make(chan string, totaljobs)
|
errChannel := make(chan string, totaljobs)
|
||||||
boundedChannel := make(chan bool, runtime.GOMAXPROCS(0) * 2)
|
boundedChannel := make(chan bool, runtime.GOMAXPROCS(0)*2)
|
||||||
positionnum := 0
|
positionnum := 0
|
||||||
for key, value := range resumefile {
|
for key, value := range resumefile {
|
||||||
if key != ".fileguard" && key != "rec" {
|
if key != ".fileguard" && key != "rec" {
|
||||||
@ -561,6 +561,8 @@ func main() {
|
|||||||
boundedChannel <- true
|
boundedChannel <- true
|
||||||
go logic(key, value.(map[string]interface{}), &bitdir, &with_label, &with_tags, &qbitdir, comChannel,
|
go logic(key, value.(map[string]interface{}), &bitdir, &with_label, &with_tags, &qbitdir, comChannel,
|
||||||
errChannel, positionnum, &wg, boundedChannel)
|
errChannel, positionnum, &wg, boundedChannel)
|
||||||
|
} else {
|
||||||
|
totaljobs--
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
|
Loading…
Reference in New Issue
Block a user