]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Readers changing wasn't triggering waitAccept
authorMatt Joiner <anacrolix@gmail.com>
Sun, 24 Jan 2016 17:14:19 +0000 (04:14 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 24 Jan 2016 17:14:19 +0000 (04:14 +1100)
Caused occasional stall in TestSeedAfterDownloading.

client_test.go
torrent.go

index d383fcead1442885ad6e73dc9934a7569ae17cee..5d0c75273213e5bd44c8c79ddcdc1dda264ec9e1 100644 (file)
@@ -7,6 +7,7 @@ import (
        "io/ioutil"
        "log"
        "net"
+       "net/http"
        "os"
        "path/filepath"
        "sync"
@@ -317,6 +318,12 @@ func TestClientTransfer(t *testing.T) {
        }
 }
 
+func exportClientStatus(cl *Client, path string) {
+       http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
+               cl.WriteStatus(w)
+       })
+}
+
 // Check that after completing leeching, a leecher transitions to a seeding
 // correctly. Connected in a chain like so: Seeder <-> Leecher <-> LeecherLeecher.
 func TestSeedAfterDownloading(t *testing.T) {
@@ -327,12 +334,14 @@ func TestSeedAfterDownloading(t *testing.T) {
        cfg.DataDir = greetingTempDir
        seeder, err := NewClient(&cfg)
        defer seeder.Close()
+       exportClientStatus(seeder, "/s")
        seeder.AddTorrentSpec(TorrentSpecFromMetaInfo(mi))
        cfg.DataDir, err = ioutil.TempDir("", "")
        require.NoError(t, err)
        defer os.RemoveAll(cfg.DataDir)
        leecher, _ := NewClient(&cfg)
        defer leecher.Close()
+       exportClientStatus(leecher, "/l")
        cfg.Seed = false
        cfg.TorrentDataOpener = nil
        cfg.DataDir, err = ioutil.TempDir("", "")
@@ -340,6 +349,7 @@ func TestSeedAfterDownloading(t *testing.T) {
        defer os.RemoveAll(cfg.DataDir)
        leecherLeecher, _ := NewClient(&cfg)
        defer leecherLeecher.Close()
+       exportClientStatus(leecherLeecher, "/ll")
        leecherGreeting, _, _ := leecher.AddTorrentSpec(func() (ret *TorrentSpec) {
                ret = TorrentSpecFromMetaInfo(mi)
                ret.ChunkSize = 2
index eaa33aa03169c9895346fd8672e0f3352d7c446f..924561cd6d317b0d0eb9ec8cf1f3fb753fab86f7 100644 (file)
@@ -813,6 +813,8 @@ func (t *torrent) forUrgentPieces(f func(piece int) (again bool)) (all bool) {
 }
 
 func (t *torrent) readersChanged(cl *Client) {
+       // Accept new connections.
+       cl.event.Broadcast()
        for _, c := range t.Conns {
                c.updateRequests()
        }