Fix bug in co refresh where contexts would be immediately cancelled

This commit is contained in:
nytpu
2021-03-23 08:53:06 -06:00
parent 5183306350
commit 76f25b7708
2 changed files with 8 additions and 9 deletions
+7 -7
View File
@@ -46,7 +46,7 @@ func Page(data *core.FullData, remote *url.URL, title string) error {
type refreshJob struct { type refreshJob struct {
typ string // "feed" or "page" typ string // "feed" or "page"
url url.URL url *url.URL
} }
// RefreshAll will check all feeds and pages in a core.FullData for updates // RefreshAll will check all feeds and pages in a core.FullData for updates
@@ -74,16 +74,16 @@ func RefreshAll(data *core.FullData, numWorkers int) error {
} }
// get all keys in maps // get all keys in maps
feedKeys := make([]url.URL, 0, len(data.Feeds)) feedKeys := make([]*url.URL, 0, len(data.Feeds))
for k := range data.Feeds { for k := range data.Feeds {
// we know that the keys are already validated uris, so no err // we know that the keys are already validated uris, so no err
u, _ := url.ParseRequestURI(k) u, _ := url.ParseRequestURI(k)
feedKeys = append(feedKeys, *u) feedKeys = append(feedKeys, u)
} }
pageKeys := make([]url.URL, 0, len(data.Pages)) pageKeys := make([]*url.URL, 0, len(data.Pages))
for k := range data.Pages { for k := range data.Pages {
u, _ := url.ParseRequestURI(k) u, _ := url.ParseRequestURI(k)
pageKeys = append(pageKeys, *u) pageKeys = append(pageKeys, u)
} }
data.RUnlock() data.RUnlock()
@@ -109,9 +109,9 @@ func refreshWorker(wg *sync.WaitGroup, jobs <-chan refreshJob, returns chan<- er
defer wg.Done() defer wg.Done()
for j := range jobs { for j := range jobs {
if j.typ == "feed" { if j.typ == "feed" {
returns <- Feed(data, &j.url, "") returns <- Feed(data, j.url, "")
} else if j.typ == "page" { } else if j.typ == "page" {
returns <- Page(data, &j.url, "") returns <- Page(data, j.url, "")
} }
} }
} }
+1 -2
View File
@@ -28,8 +28,7 @@ import (
// fetchGemini will make a request for a gemini resource // fetchGemini will make a request for a gemini resource
func fetchGemini(remote string) (*gemini.Response, error) { func fetchGemini(remote string) (*gemini.Response, error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(core.Timeout)*time.Second) ctx, _ := context.WithTimeout(context.Background(), time.Duration(core.Timeout)*time.Second)
defer cancel()
client := &gemini.Client{} client := &gemini.Client{}
resp, err := client.Get(ctx, remote) resp, err := client.Get(ctx, remote)
if err != nil { if err != nil {