diff --git a/cmd/stdiscosrv/main.go b/cmd/stdiscosrv/main.go index a98bd90a0..9c6199bf3 100644 --- a/cmd/stdiscosrv/main.go +++ b/cmd/stdiscosrv/main.go @@ -19,11 +19,11 @@ import ( "strings" "time" - "github.com/calmh/suture" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/tlsutil" "github.com/syndtr/goleveldb/leveldb/opt" + "github.com/thejerf/suture" ) const ( @@ -165,7 +165,7 @@ func main() { // Root of the service tree. main := suture.New("main", suture.Spec{ - PanicPanics: true, + PassThroughPanics: true, }) // Start the database. diff --git a/cmd/syncthing/gui_test.go b/cmd/syncthing/gui_test.go index 6386f1348..0617f6bfd 100644 --- a/cmd/syncthing/gui_test.go +++ b/cmd/syncthing/gui_test.go @@ -23,13 +23,13 @@ import ( "testing" "time" - "github.com/calmh/suture" "github.com/d4l3k/messagediff" "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/events" "github.com/syncthing/syncthing/lib/fs" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/sync" + "github.com/thejerf/suture" ) func TestCSRFToken(t *testing.T) { @@ -78,7 +78,7 @@ func TestStopAfterBrokenConfig(t *testing.T) { srv.started = make(chan string) sup := suture.New("test", suture.Spec{ - PanicPanics: true, + PassThroughPanics: true, }) sup.Add(srv) sup.ServeBackground() @@ -490,7 +490,7 @@ func startHTTP(cfg *mockedConfig) (string, error) { // Actually start the API service supervisor := suture.New("API test", suture.Spec{ - PanicPanics: true, + PassThroughPanics: true, }) supervisor.Add(svc) supervisor.ServeBackground() diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 31e4a9151..64625a4fa 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -47,7 +47,7 @@ import ( "github.com/syncthing/syncthing/lib/tlsutil" "github.com/syncthing/syncthing/lib/upgrade" - "github.com/calmh/suture" + "github.com/thejerf/suture" _ "net/http/pprof" // Need to import this to support STPROFILER. ) @@ -594,7 +594,7 @@ func syncthingMain(runtimeOptions RuntimeOptions) { Log: func(line string) { l.Debugln(line) }, - PanicPanics: true, + PassThroughPanics: true, }) mainService.ServeBackground() diff --git a/cmd/syncthing/summaryservice.go b/cmd/syncthing/summaryservice.go index f53b79609..a693721d5 100644 --- a/cmd/syncthing/summaryservice.go +++ b/cmd/syncthing/summaryservice.go @@ -9,10 +9,10 @@ package main import ( "time" - "github.com/calmh/suture" "github.com/syncthing/syncthing/lib/events" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/sync" + "github.com/thejerf/suture" ) // The folderSummaryService adds summary information events (FolderSummary and @@ -37,7 +37,7 @@ type folderSummaryService struct { func newFolderSummaryService(cfg configIntf, m modelIntf) *folderSummaryService { service := &folderSummaryService{ Supervisor: suture.New("folderSummaryService", suture.Spec{ - PanicPanics: true, + PassThroughPanics: true, }), cfg: cfg, model: m, diff --git a/lib/beacon/beacon.go b/lib/beacon/beacon.go index 183a24f52..47a286379 100644 --- a/lib/beacon/beacon.go +++ b/lib/beacon/beacon.go @@ -10,7 +10,7 @@ import ( "net" stdsync "sync" - "github.com/calmh/suture" + "github.com/thejerf/suture" ) type recv struct { diff --git a/lib/beacon/broadcast.go b/lib/beacon/broadcast.go index 4367f8212..d41e9ad10 100644 --- a/lib/beacon/broadcast.go +++ b/lib/beacon/broadcast.go @@ -11,8 +11,8 @@ import ( "net" "time" - "github.com/calmh/suture" "github.com/syncthing/syncthing/lib/sync" + "github.com/thejerf/suture" ) type Broadcast struct { @@ -36,7 +36,7 @@ func NewBroadcast(port int) *Broadcast { Log: func(line string) { l.Debugln(line) }, - PanicPanics: true, + PassThroughPanics: true, }), port: port, inbox: make(chan []byte), diff --git a/lib/beacon/multicast.go b/lib/beacon/multicast.go index e23f48548..0bc91a7ea 100644 --- a/lib/beacon/multicast.go +++ b/lib/beacon/multicast.go @@ -12,7 +12,7 @@ import ( "net" "time" - "github.com/calmh/suture" + "github.com/thejerf/suture" "golang.org/x/net/ipv6" ) @@ -36,7 +36,7 @@ func NewMulticast(addr string) *Multicast { Log: func(line string) { l.Debugln(line) }, - PanicPanics: true, + PassThroughPanics: true, }), inbox: make(chan []byte), outbox: make(chan recv, 16), diff --git a/lib/connections/service.go b/lib/connections/service.go index 50dfcbc51..0f656374b 100644 --- a/lib/connections/service.go +++ b/lib/connections/service.go @@ -30,7 +30,7 @@ import ( _ "github.com/syncthing/syncthing/lib/pmp" _ "github.com/syncthing/syncthing/lib/upnp" - "github.com/calmh/suture" + "github.com/thejerf/suture" "golang.org/x/time/rate" ) @@ -105,7 +105,7 @@ func NewService(cfg *config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg * Log: func(line string) { l.Infoln(line) }, - PanicPanics: true, + PassThroughPanics: true, }), cfg: cfg, myID: myID, @@ -130,9 +130,9 @@ func NewService(cfg *config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg * Log: func(line string) { l.Infoln(line) }, - FailureThreshold: 2, - FailureBackoff: 600 * time.Second, - PanicPanics: true, + FailureThreshold: 2, + FailureBackoff: 600 * time.Second, + PassThroughPanics: true, }), } cfg.Subscribe(service) diff --git a/lib/discover/cache.go b/lib/discover/cache.go index 4a34ee60a..2fb281696 100644 --- a/lib/discover/cache.go +++ b/lib/discover/cache.go @@ -10,10 +10,10 @@ import ( stdsync "sync" "time" - "github.com/calmh/suture" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/sync" "github.com/syncthing/syncthing/lib/util" + "github.com/thejerf/suture" ) // The CachingMux aggregates results from multiple Finders. Each Finder has @@ -52,7 +52,7 @@ type cachedError interface { func NewCachingMux() CachingMux { return &cachingMux{ Supervisor: suture.New("discover.cachingMux", suture.Spec{ - PanicPanics: true, + PassThroughPanics: true, }), mut: sync.NewRWMutex(), } diff --git a/lib/discover/discover.go b/lib/discover/discover.go index c88fed9ef..4d4821332 100644 --- a/lib/discover/discover.go +++ b/lib/discover/discover.go @@ -9,8 +9,8 @@ package discover import ( "time" - "github.com/calmh/suture" "github.com/syncthing/syncthing/lib/protocol" + "github.com/thejerf/suture" ) // A Finder provides lookup services of some kind. diff --git a/lib/discover/local.go b/lib/discover/local.go index 0141e9f78..6cf1a4123 100644 --- a/lib/discover/local.go +++ b/lib/discover/local.go @@ -18,11 +18,11 @@ import ( "strconv" "time" - "github.com/calmh/suture" "github.com/syncthing/syncthing/lib/beacon" "github.com/syncthing/syncthing/lib/events" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/rand" + "github.com/thejerf/suture" ) type localClient struct { @@ -49,7 +49,7 @@ const ( func NewLocal(id protocol.DeviceID, addr string, addrList AddressLister) (FinderService, error) { c := &localClient{ Supervisor: suture.New("local", suture.Spec{ - PanicPanics: true, + PassThroughPanics: true, }), myID: id, addrList: addrList, diff --git a/lib/model/model.go b/lib/model/model.go index 74ac4d217..624c6fe1d 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -22,7 +22,6 @@ import ( "strings" "time" - "github.com/calmh/suture" "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/connections" "github.com/syncthing/syncthing/lib/db" @@ -36,6 +35,7 @@ import ( "github.com/syncthing/syncthing/lib/sync" "github.com/syncthing/syncthing/lib/upgrade" "github.com/syncthing/syncthing/lib/versioner" + "github.com/thejerf/suture" ) var locationLocal *time.Location @@ -136,7 +136,7 @@ func NewModel(cfg *config.Wrapper, id protocol.DeviceID, clientName, clientVersi Log: func(line string) { l.Debugln(line) }, - PanicPanics: true, + PassThroughPanics: true, }), cfg: cfg, db: ldb, diff --git a/vendor/github.com/calmh/suture/LICENSE b/vendor/github.com/thejerf/suture/LICENSE similarity index 100% rename from vendor/github.com/calmh/suture/LICENSE rename to vendor/github.com/thejerf/suture/LICENSE diff --git a/vendor/github.com/calmh/suture/doc.go b/vendor/github.com/thejerf/suture/doc.go similarity index 100% rename from vendor/github.com/calmh/suture/doc.go rename to vendor/github.com/thejerf/suture/doc.go diff --git a/vendor/github.com/calmh/suture/messages.go b/vendor/github.com/thejerf/suture/messages.go similarity index 100% rename from vendor/github.com/calmh/suture/messages.go rename to vendor/github.com/thejerf/suture/messages.go diff --git a/vendor/github.com/calmh/suture/service.go b/vendor/github.com/thejerf/suture/service.go similarity index 100% rename from vendor/github.com/calmh/suture/service.go rename to vendor/github.com/thejerf/suture/service.go diff --git a/vendor/github.com/calmh/suture/supervisor.go b/vendor/github.com/thejerf/suture/supervisor.go similarity index 97% rename from vendor/github.com/calmh/suture/supervisor.go rename to vendor/github.com/thejerf/suture/supervisor.go index 234640edd..9ca0df505 100644 --- a/vendor/github.com/calmh/suture/supervisor.go +++ b/vendor/github.com/thejerf/suture/supervisor.go @@ -126,15 +126,15 @@ type Supervisor struct { // Spec is used to pass arguments to the New function to create a // supervisor. See the New function for full documentation. type Spec struct { - Log func(string) - FailureDecay float64 - FailureThreshold float64 - FailureBackoff time.Duration - Timeout time.Duration - LogBadStop BadStopLogger - LogFailure FailureLogger - LogBackoff BackoffLogger - PanicPanics bool + Log func(string) + FailureDecay float64 + FailureThreshold float64 + FailureBackoff time.Duration + Timeout time.Duration + LogBadStop BadStopLogger + LogFailure FailureLogger + LogBackoff BackoffLogger + PassThroughPanics bool } /* @@ -178,6 +178,9 @@ failure count to zero. Timeout is how long Suture will wait for a service to properly terminate. +The PassThroughPanics options can be set to let panics in services propagate +and crash the program, should this be desirable. + */ func New(name string, spec Spec) (s *Supervisor) { s = new(Supervisor) @@ -216,7 +219,7 @@ func New(name string, spec Spec) (s *Supervisor) { } else { s.timeout = spec.Timeout } - s.recoverPanics = !spec.PanicPanics + s.recoverPanics = !spec.PassThroughPanics // overriding these allows for testing the threshold behavior s.getNow = time.Now diff --git a/vendor/manifest b/vendor/manifest index 8dff14d9e..8a096bdfd 100644 --- a/vendor/manifest +++ b/vendor/manifest @@ -74,14 +74,6 @@ "branch": "master", "notests": true }, - { - "importpath": "github.com/calmh/suture", - "repository": "https://github.com/calmh/suture", - "vcs": "git", - "revision": "2741a6bb8fdeba8f30c948c83756edc4dd21b9c6", - "branch": "master", - "notests": true - }, { "importpath": "github.com/calmh/xdr", "repository": "https://github.com/calmh/xdr", @@ -440,6 +432,14 @@ "branch": "master", "notests": true }, + { + "importpath": "github.com/thejerf/suture", + "repository": "https://github.com/thejerf/suture", + "vcs": "git", + "revision": "bf6ee6a0b047ebbe9ae07d847f750dd18c6a9276", + "branch": "master", + "notests": true + }, { "importpath": "github.com/tjfoc/gmsm/sm4", "repository": "https://github.com/tjfoc/gmsm",