From 6b0dc499502ad8b12b9bc67d359c63b22cbf3a3d Mon Sep 17 00:00:00 2001 From: Chelsea Holland Komlo Date: Mon, 26 Feb 2018 14:55:53 -0500 Subject: [PATCH] fingerprinters accessing node information should be thread safe --- client/fingerprint_manager.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/client/fingerprint_manager.go b/client/fingerprint_manager.go index a191555aa..74b75bafd 100644 --- a/client/fingerprint_manager.go +++ b/client/fingerprint_manager.go @@ -100,15 +100,20 @@ func (fm *FingerprintManager) setupDrivers(drivers []string) error { func (fm *FingerprintManager) fingerprint(name string, f fingerprint.Fingerprint) (bool, error) { request := &cstructs.FingerprintRequest{Config: fm.getConfig(), Node: fm.node} var response cstructs.FingerprintResponse - if err := f.Fingerprint(request, &response); err != nil { + + fm.nodeLock.Lock() + err := f.Fingerprint(request, &response) + fm.nodeLock.Unlock() + + if err != nil { return false, err } - fm.nodeLock.Lock() if node := fm.updateNode(&response); node != nil { + fm.nodeLock.Lock() fm.node = node + fm.nodeLock.Unlock() } - fm.nodeLock.Unlock() return response.Detected, nil }