Fix Workerpool deadlock (#10283)
* Prevent deadlock on boost * Force a boost in testchannelqueue
This commit is contained in:
		
							parent
							
								
									15614a8368
								
							
						
					
					
						commit
						88986746d5
					
				
					 2 changed files with 6 additions and 3 deletions
				
			
		|  | @ -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} | ||||
|  |  | |||
|  | @ -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…
	
		Reference in a new issue