فهرست منبع

sync bug w/ timings

zach rice 6 سال پیش
والد
کامیت
dfbd01a980
1فایلهای تغییر یافته به همراه5 افزوده شده و 0 حذف شده
  1. 5 0
      manager/manager.go

+ 5 - 0
manager/manager.go

@@ -32,6 +32,7 @@ type Manager struct {
 
 
 	stopChan chan os.Signal
 	stopChan chan os.Signal
 	metadata Metadata
 	metadata Metadata
+	metaWG   *sync.WaitGroup
 }
 }
 
 
 // Leak is a struct that contains information about some line of code that contains
 // Leak is a struct that contains information about some line of code that contains
@@ -128,6 +129,7 @@ func (manager *Manager) receiveLeaks() {
 
 
 // GetMetadata returns the metadata. TODO this may not need to be private
 // GetMetadata returns the metadata. TODO this may not need to be private
 func (manager *Manager) GetMetadata() Metadata {
 func (manager *Manager) GetMetadata() Metadata {
+	manager.metaWG.Wait()
 	return manager.metadata
 	return manager.metadata
 }
 }
 
 
@@ -146,6 +148,7 @@ func (manager *Manager) receiveMetadata() {
 		case RegexTime:
 		case RegexTime:
 			manager.metadata.RegexTime[ti.Regex] = manager.metadata.RegexTime[ti.Regex] + ti.Time
 			manager.metadata.RegexTime[ti.Regex] = manager.metadata.RegexTime[ti.Regex] + ti.Time
 		}
 		}
+		manager.metaWG.Done()
 	}
 	}
 }
 }
 
 
@@ -158,6 +161,7 @@ func (manager *Manager) IncrementCommits(i int) {
 
 
 // RecordTime accepts an interface and sends it to the manager's time channel
 // RecordTime accepts an interface and sends it to the manager's time channel
 func (manager *Manager) RecordTime(t interface{}) {
 func (manager *Manager) RecordTime(t interface{}) {
+	manager.metaWG.Add(1)
 	manager.metadata.timings <- t
 	manager.metadata.timings <- t
 }
 }
 
 
@@ -177,6 +181,7 @@ func NewManager(opts options.Options, cfg config.Config) (*Manager, error) {
 		stopChan: make(chan os.Signal, 1),
 		stopChan: make(chan os.Signal, 1),
 		leakChan: make(chan Leak),
 		leakChan: make(chan Leak),
 		leakWG:   &sync.WaitGroup{},
 		leakWG:   &sync.WaitGroup{},
+		metaWG:   &sync.WaitGroup{},
 		metadata: Metadata{
 		metadata: Metadata{
 			RegexTime: make(map[string]int64),
 			RegexTime: make(map[string]int64),
 			timings:   make(chan interface{}),
 			timings:   make(chan interface{}),