From 95736c0bc458942c256f2b1b8a59715c1718529c Mon Sep 17 00:00:00 2001 From: yzqzss Date: Sun, 23 Jun 2024 18:19:01 +0800 Subject: [PATCH] fix: stackoverflow --- src/saveweb_tracker/tracker.go | 2 +- src/saveweb_tracker/tracker_project.go | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/saveweb_tracker/tracker.go b/src/saveweb_tracker/tracker.go index 0b8580f..b6b5aee 100644 --- a/src/saveweb_tracker/tracker.go +++ b/src/saveweb_tracker/tracker.go @@ -165,7 +165,7 @@ func (t *Tracker) StartSelectTrackerBackground() *Tracker { for { fmt.Println("[client->trackers] SelectBestTrackerBackground...") t.SelectBestTracker() - time.Sleep(5 * time.Minute) + time.Sleep(1 * time.Minute) } }() return t diff --git a/src/saveweb_tracker/tracker_project.go b/src/saveweb_tracker/tracker_project.go index 9090c24..84a02d6 100644 --- a/src/saveweb_tracker/tracker_project.go +++ b/src/saveweb_tracker/tracker_project.go @@ -11,15 +11,29 @@ import ( ) func (t *Tracker) Project() (proj Project) { - if time.Since(t.__project_last_fetched) < 3*time.Minute { + if time.Since(t.__project_last_fetched) <= 3*time.Minute { return *t.__project } t.StartFetchProjectBackground() - for t.__project == nil { + + for t.__project == nil { // initial fetch time.Sleep(1 * time.Second) + if t.__project != nil { // fetch success + return t.Project() + } + } + + for { // not nil, but outdated + if time.Since(t.__project_last_fetched) > 5*time.Minute { // over 5 minutes, abort + panic("all fetch failed for 5 minutes") + } + if time.Since(t.__project_last_fetched) <= 3*time.Minute { // not outdated anymore + return *t.__project + } + go t.FetchProject(5 * time.Second) // short timeout + time.Sleep(8 * time.Second) } - return t.Project() } func (t *Tracker) StartFetchProjectBackground() *Tracker {