瀏覽代碼

Fix Workerpool deadlock (#10283)

* Prevent deadlock on boost

* Force a boost in testchannelqueue
tags/v1.10.5
zeripath 4 年之前
父節點
當前提交
88986746d5
沒有連結到貢獻者的電子郵件帳戶。
共有 2 個檔案被更改,包括 6 行新增3 行删除
  1. 5
    2
      modules/queue/queue_channel_test.go
  2. 1
    1
      modules/queue/workerpool.go

+ 5
- 2
modules/queue/queue_channel_test.go 查看文件

@@ -26,16 +26,19 @@ func TestChannelQueue(t *testing.T) {
queue, err := NewChannelQueue(handle,
ChannelQueueConfiguration{
WorkerPoolConfiguration: WorkerPoolConfiguration{
QueueLength: 20,
QueueLength: 0,
MaxWorkers: 10,
BlockTimeout: 1 * time.Second,
BoostTimeout: 5 * time.Minute,
BoostWorkers: 5,
},
Workers: 1,
Workers: 0,
Name: "TestChannelQueue",
}, &testData{})
assert.NoError(t, err)

assert.Equal(t, queue.(*ChannelQueue).WorkerPool.boostWorkers, 5)

go queue.Run(nilFn, nilFn)

test1 := testData{"A", 1}

+ 1
- 1
modules/queue/workerpool.go 查看文件

@@ -132,8 +132,8 @@ func (p *WorkerPool) pushBoost(data Data) {
p.blockTimeout /= 2
p.lock.Unlock()
}()
p.addWorkers(ctx, boost)
p.lock.Unlock()
p.addWorkers(ctx, boost)
p.dataChan <- data
}
}

Loading…
取消
儲存