You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Shutdown waits until all consumers are stopped.
mutex:= sync.Mutex{}
shutdownWaitGroup:= sync.WaitGroup{}
copyedConsumers:=make(map[int]*Consumer, h.consumersMax) // To prevent deadlock while iterating over consumers
forconsumerId, consumer:=rangeh.consumers {
copyedConsumers[consumerId] =consumer
}
shutdownWaitGroup.Add(1)
gofunc() {
defershutdownWaitGroup.Done()
forconsumerId, consumer:=rangecopyedConsumers {
consumer.Pause()
mutex.Lock()
delete(h.consumers, consumerId)
mutex.Unlock()
}
}()
Hub Shutdown은 함수 내부에서 뮤텍스를 생성해 사용하기 때문에 위에 언급된 함수가 사용하는 mutex와 다릅니다. 따라서 Shutdown 도중 위에 언급된 함수가 실행되면 map에서 동시 Read/Write를 하게 되고 panic이 발생합니다. 만약 동시 실행이 절대 불가능한 환경이라면 mutex를 제거하는 것이 좋아보입니다.
The text was updated successfully, but these errors were encountered:
Hub Shutdown과 동시에 해당 함수가 실행된다면 panic이 발생합니다.
queue-manager/internal/queue/kafka/hub.go
Lines 99 to 106 in b8184d4
queue-manager/internal/queue/kafka/hub.go
Lines 108 to 113 in b8184d4
queue-manager/internal/queue/kafka/hub.go
Lines 139 to 145 in b8184d4
queue-manager/internal/queue/kafka/hub.go
Lines 167 to 180 in b8184d4
queue-manager/internal/queue/kafka/hub.go
Lines 187 to 212 in b8184d4
Hub Shutdown은 함수 내부에서 뮤텍스를 생성해 사용하기 때문에 위에 언급된 함수가 사용하는 mutex와 다릅니다. 따라서 Shutdown 도중 위에 언급된 함수가 실행되면 map에서 동시 Read/Write를 하게 되고 panic이 발생합니다. 만약 동시 실행이 절대 불가능한 환경이라면 mutex를 제거하는 것이 좋아보입니다.
The text was updated successfully, but these errors were encountered: