prevent buildqueue from looping unnecessary if no build can be started
This commit is contained in:
@@ -114,14 +114,18 @@ func (b *BuildManager) SRCINFOWorker(ctx context.Context, workIn chan string, wg
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *BuildManager) buildQueue(queue []*ProtoPackage, ctx context.Context) error {
|
func (b *BuildManager) buildQueue(queue []*ProtoPackage, ctx context.Context) error {
|
||||||
var doneQ []*ProtoPackage
|
var (
|
||||||
doneQLock := new(sync.RWMutex)
|
doneQ []*ProtoPackage
|
||||||
var unknownBuilds bool
|
doneQLock = new(sync.RWMutex)
|
||||||
|
unknownBuilds bool
|
||||||
|
queueNoMatch bool
|
||||||
|
)
|
||||||
|
|
||||||
for len(doneQ) != len(queue) {
|
for len(doneQ) != len(queue) {
|
||||||
up := 0
|
up := 0
|
||||||
b.buildingLock.RLock()
|
b.buildingLock.RLock()
|
||||||
if (pkgList2MaxMem(b.building) < conf.Build.MemoryLimit && !unknownBuilds) || (unknownBuilds && len(b.building) < 1) {
|
if (pkgList2MaxMem(b.building) < conf.Build.MemoryLimit && !unknownBuilds && !queueNoMatch) || (unknownBuilds && len(b.building) < 1) {
|
||||||
|
queueNoMatch = true
|
||||||
b.buildingLock.RUnlock()
|
b.buildingLock.RUnlock()
|
||||||
for _, pkg := range queue {
|
for _, pkg := range queue {
|
||||||
// check if package is already build
|
// check if package is already build
|
||||||
@@ -184,6 +188,7 @@ func (b *BuildManager) buildQueue(queue []*ProtoPackage, ctx context.Context) er
|
|||||||
b.buildingLock.Lock()
|
b.buildingLock.Lock()
|
||||||
b.building = append(b.building, pkg)
|
b.building = append(b.building, pkg)
|
||||||
b.buildingLock.Unlock()
|
b.buildingLock.Unlock()
|
||||||
|
queueNoMatch = false
|
||||||
|
|
||||||
go func(pkg *ProtoPackage) {
|
go func(pkg *ProtoPackage) {
|
||||||
dur, err := pkg.build(ctx)
|
dur, err := pkg.build(ctx)
|
||||||
@@ -212,6 +217,7 @@ func (b *BuildManager) buildQueue(queue []*ProtoPackage, ctx context.Context) er
|
|||||||
log.Debugf("[Q] memory/build limit reached, waiting for package to finish...")
|
log.Debugf("[Q] memory/build limit reached, waiting for package to finish...")
|
||||||
b.buildingLock.RUnlock()
|
b.buildingLock.RUnlock()
|
||||||
<-b.queueSignal
|
<-b.queueSignal
|
||||||
|
queueNoMatch = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// if only unknown packages are left, enable unknown buildmode
|
// if only unknown packages are left, enable unknown buildmode
|
||||||
|
Reference in New Issue
Block a user