From: Matt Joiner Date: Sun, 24 Jan 2016 17:14:19 +0000 (+1100) Subject: Readers changing wasn't triggering waitAccept X-Git-Tag: v1.0.0~939^2~5 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=94d764e6be4de86484d16ecec3a902ceef6f3516;p=btrtrc.git Readers changing wasn't triggering waitAccept Caused occasional stall in TestSeedAfterDownloading. --- diff --git a/client_test.go b/client_test.go index d383fcea..5d0c7527 100644 --- a/client_test.go +++ b/client_test.go @@ -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 diff --git a/torrent.go b/torrent.go index eaa33aa0..924561cd 100644 --- a/torrent.go +++ b/torrent.go @@ -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() }