From ec9bbe8a6cb4e0e46e0fc95cbdd611d821825e2c Mon Sep 17 00:00:00 2001 From: cheetah Date: Sat, 24 Jun 2023 16:27:22 -0500 Subject: [PATCH] deadlock fixed i guess --- storageserver/storageserver.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/storageserver/storageserver.go b/storageserver/storageserver.go index e0e880a..b9aab1c 100644 --- a/storageserver/storageserver.go +++ b/storageserver/storageserver.go @@ -438,12 +438,13 @@ func (p *PoolMaster) PackPool(poolID string) (packResult PoolPackResult, err err startTime := time.Now() packResult.PoolID = poolID - fmt.Printf("Aquiring Lock for PackPool(%s)\n", poolID) - p.lock.Lock() - defer p.lock.Unlock() - defer fmt.Printf("unlock PackPool\n") - fmt.Printf("Aquired Lock success for PackPool(%s)\n", poolID) - + /* + fmt.Printf("Aquiring Lock for PackPool(%s)\n", poolID) + p.lock.Lock() + defer p.lock.Unlock() + defer fmt.Printf("unlock PackPool\n") + fmt.Printf("Aquired Lock success for PackPool(%s)\n", poolID) + */ packResult.outputFileName = filepath.Join(p.cachePath, "pool", fmt.Sprintf("%s.tar", poolID)) tarFile, err := os.Create(packResult.outputFileName) if err != nil { @@ -804,7 +805,8 @@ func main() { go func() { for { - for index, fullPool := range poolMaster.FullPools { + var deletedPools []string + for _, fullPool := range poolMaster.FullPools { poolMaster.lock.Lock() packResult, err := poolMaster.PackPool(fullPool.PoolID) @@ -820,10 +822,17 @@ func main() { panic(err) } os.RemoveAll(filepath.Join(poolMaster.cachePath, "pool", fullPool.PoolID)) - poolMaster.FullPools = removeFromSlice(poolMaster.FullPools, index) - + deletedPools = append(deletedPools, fullPool.PoolID) poolMaster.lock.Unlock() } + for _, deletedPoolID := range deletedPools { + for index, fullPool := range poolMaster.FullPools { + if fullPool.PoolID == deletedPoolID { + poolMaster.FullPools = removeFromSlice(poolMaster.FullPools, index) + break + } + } + } time.Sleep(time.Second * 10) } }()