From f1802c516139d0c9d0df6f874946508bb922a512 Mon Sep 17 00:00:00 2001 From: Albert Wang Date: Sat, 25 Feb 2023 12:32:03 -0800 Subject: [PATCH] Remove mutexes --- data_test.go | 11 ----------- localtimezone.go | 11 +---------- localtimezone_test.go | 32 ++------------------------------ 3 files changed, 3 insertions(+), 51 deletions(-) diff --git a/data_test.go b/data_test.go index 40642c0..2832df3 100644 --- a/data_test.go +++ b/data_test.go @@ -101,8 +101,6 @@ func TestTzidPresent(t *testing.T) { if !ok { t.Error("error when initializing client") } - z.mu.RLock() - defer z.mu.RUnlock() _, ok = z.tzData["id"] if ok { t.Error("unexpected feature with empty tzid") @@ -118,8 +116,6 @@ func TestPolygons(t *testing.T) { if !ok { t.Error("error when initializing client") } - z.mu.RLock() - defer z.mu.RUnlock() for tzid, d := range z.tzData { if d.polygon != nil { for _, ring := range *d.polygon { @@ -140,13 +136,6 @@ func BenchmarkGetZone(b *testing.B) { if err != nil { b.Errorf("cannot initialize test cases: %v", err) } - - // Ensure client has finished loading data - _, err = client.GetZone(Point{0, 0}) - if err != nil { - b.Errorf("cannot initialize timezone client: %v", err) - } - b.Run("GetZone on large cities", func(b *testing.B) { Loop: for n := 0; n < b.N; { diff --git a/localtimezone.go b/localtimezone.go index e64bbb6..033afa3 100644 --- a/localtimezone.go +++ b/localtimezone.go @@ -94,7 +94,6 @@ type tzData struct { type localTimeZone struct { tzids []string tzData map[string]tzData - mu sync.RWMutex } var _ LocalTimeZone = &localTimeZone{} @@ -164,8 +163,6 @@ func (z *localTimeZone) getZone(point Point, single bool) (tzids []string, err e if p[0] > 180 || p[0] < -180 || p[1] > 90 || p[1] < -90 { return nil, ErrOutOfRange } - z.mu.RLock() - defer z.mu.RUnlock() for _, id := range z.tzids { d := z.tzData[id] if !d.bound.Contains(p) { @@ -276,8 +273,6 @@ func (z *localTimeZone) buildCache(features []*geojson.Feature) { // loadGeoJSON loads a custom GeoJSON shapefile from a Reader func (z *localTimeZone) loadGeoJSON(r io.Reader) error { - z.mu.Lock() - var buf bytes.Buffer _, err := buf.ReadFrom(r) if err != nil { @@ -287,14 +282,10 @@ func (z *localTimeZone) loadGeoJSON(r io.Reader) error { if err != nil { z.tzData = make(map[string]tzData) z.tzids = []string{} - z.mu.Unlock() return err } z.tzData = make(map[string]tzData, TZCount) // Possibly the incorrect length in case of Mock or custom data z.tzids = []string{} // Cannot set a length or else array will be full of empty strings - go func(features []*geojson.Feature) { - defer z.mu.Unlock() - z.buildCache(features) - }(orbData.Features) + z.buildCache(orbData.Features) return nil } diff --git a/localtimezone_test.go b/localtimezone_test.go index 461b7b3..fe76343 100644 --- a/localtimezone_test.go +++ b/localtimezone_test.go @@ -281,13 +281,6 @@ func BenchmarkZones(b *testing.B) { if !ok { b.Errorf("cannot initialize timezone client") } - - // Ensure client has finished loading data - _, err = z.GetZone(Point{0, 0}) - if err != nil { - b.Errorf("cannot initialize timezone client: %v", err) - } - b.Run("polygon centers", func(b *testing.B) { Loop: for n := 0; n < b.N; { @@ -329,28 +322,16 @@ func BenchmarkZones(b *testing.B) { func BenchmarkClientInit(b *testing.B) { b.Run("main client", func(b *testing.B) { for n := 0; n < b.N; { - c, err := NewLocalTimeZone() + _, err := NewLocalTimeZone() if err != nil { b.Errorf("client could not initialize because of %v", err) } - cStruct, ok := c.(*localTimeZone) - if !ok { - b.Errorf("cannot initialize timezone client") - } - cStruct.mu.RLock() - defer cStruct.mu.RUnlock() n++ } }) b.Run("mock client", func(b *testing.B) { for n := 0; n < b.N; { - c := NewMockLocalTimeZone() - cStruct, ok := c.(*localTimeZone) - if !ok { - b.Errorf("cannot initialize timezone client") - } - cStruct.mu.RLock() - defer cStruct.mu.RUnlock() + NewMockLocalTimeZone() n++ } }) @@ -431,11 +412,6 @@ func TestLoadGeoJSONMalformed(t *testing.T) { if err == nil { t.Errorf("expected error, got %v", err) } - unlocked := c.mu.TryLock() - if !unlocked { - t.Errorf("expected lock to be released") - } - defer c.mu.Unlock() if len(c.tzData) != 0 { t.Errorf("tzData not reset") @@ -451,13 +427,9 @@ func TestLoadOverwrite(t *testing.T) { if !ok { t.Errorf("cannot initialize client") } - c.mu.RLock() lenTzData := len(c.tzData) - c.mu.RUnlock() err = c.load(MockTZShapeFile) - c.mu.RLock() - defer c.mu.RUnlock() if err != nil { t.Errorf("cannot switch client to mock data, got %v", err) }