mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-29 02:51:45 +01:00
Service: fx miss of events, due to return of RegisterReceiver method before registration is assured
This commit is contained in:
parent
cfa23614d9
commit
4a1257e135
@ -67,6 +67,7 @@ func (em *EventManager) RegisterReceiver(filterEventType int64) *EventReceiver {
|
||||
Ctx: ctx,
|
||||
Cancel: cancel,
|
||||
FilterEventType: filterEventType,
|
||||
waitRegister: make(chan struct{}),
|
||||
}
|
||||
|
||||
|
||||
@ -74,6 +75,9 @@ func (em *EventManager) RegisterReceiver(filterEventType int64) *EventReceiver {
|
||||
em.registerReceiver <- er
|
||||
er.isRegistered = true
|
||||
|
||||
// wait till registration is assured
|
||||
<-er.waitRegister
|
||||
|
||||
go func() {
|
||||
<- er.Ctx.Done() //continue watching and assure unregister as soon as possible if canceled
|
||||
em.UnregisterReceiver(er)
|
||||
@ -133,6 +137,8 @@ loop:
|
||||
em.registeredReceiversMutex.Lock()
|
||||
em.registeredReceivers[er] = true
|
||||
fmt.Printf("Registered event receiver type %d, overall receiver count %d\n", er.FilterEventType, len(em.registeredReceivers))
|
||||
// signal registration by closing wait channel
|
||||
close(er.waitRegister)
|
||||
em.registeredReceiversMutex.Unlock()
|
||||
case er := <- em.unregisterReceiver:
|
||||
em.registeredReceiversMutex.Lock()
|
||||
@ -149,6 +155,7 @@ loop:
|
||||
}
|
||||
|
||||
type EventReceiver struct {
|
||||
waitRegister chan struct{}
|
||||
isRegistered bool
|
||||
Ctx context.Context
|
||||
Cancel context.CancelFunc
|
||||
|
Loading…
x
Reference in New Issue
Block a user