From 3f7c731f999b1f5914a5e23f39c2943961ce17d1 Mon Sep 17 00:00:00 2001 From: morganamilo Date: Mon, 19 Feb 2018 04:25:36 +0000 Subject: [PATCH] Make aurInfo concurrent --- query.go | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/query.go b/query.go index ff5944f..e76a2c6 100644 --- a/query.go +++ b/query.go @@ -4,6 +4,7 @@ import ( "fmt" "sort" "strings" + "sync" alpm "github.com/jguer/go-alpm" rpc "github.com/mikkeloscar/aur" @@ -368,14 +369,36 @@ func min(a, b int) int { func aurInfo(names []string) ([]rpc.Pkg, error) { info := make([]rpc.Pkg, 0, len(names)) seen := make(map[string]int) + var mux sync.Mutex + var wg sync.WaitGroup + var err error + + makeRequest := func(n, max int) { + tempInfo, requestErr := rpc.Info(names[n:max]) + if err != nil { + return + } + if requestErr != nil { + //return info, err + err = requestErr + return + } + mux.Lock() + info = append(info, tempInfo...) + mux.Unlock() + wg.Done() + } for n := 0; n < len(names); n += config.RequestSplitN { max := min(len(names), n + config.RequestSplitN) - tempInfo, err := rpc.Info(names[n:max]) - if err != nil { - return info, err - } - info = append(info, tempInfo...) + wg.Add(1) + go makeRequest(n, max) + } + + wg.Wait() + + if err != nil { + return info, err } for k, pkg := range info {