refactor: rewrite getHandler

This commit is contained in:
Derrick Hammer 2024-03-21 16:56:29 -04:00
parent 74cc88540d
commit d06f436fa1
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
1 changed files with 26 additions and 17 deletions

View File

@ -62,26 +62,35 @@ func (hs *APIRouter) getHandlerByDomain(domain string) http.Handler {
func (hs *APIRouter) getHandler(protocol string) http.Handler {
hs.mutex.RLock()
defer hs.mutex.RUnlock()
if handler := hs.apiHandlers[protocol]; handler == nil {
if proto := hs.apis[protocol]; proto == nil {
handler, ok := hs.apiHandlers[protocol]
hs.mutex.RUnlock()
if ok {
return handler
}
hs.mutex.Lock()
defer hs.mutex.Unlock()
// Double-check if the handler was created while acquiring the write lock
if handler, ok := hs.apiHandlers[protocol]; ok {
return handler
}
proto, ok := hs.apis[protocol]
if !ok {
hs.logger.Fatal("Protocol not found", zap.String("protocol", protocol))
return nil
}
routes, err := hs.apis[protocol].Routes()
routes, err := proto.Routes()
if err != nil {
hs.logger.Fatal("Error getting routes", zap.Error(err))
return nil
}
hs.mutex.Lock()
defer hs.mutex.Unlock()
hs.apiHandlers[protocol] = routes
}
return hs.apiHandlers[protocol]
return routes
}
func NewAPIRouter() *APIRouter {