func getTopic(name string) (t *topic.Ins, err error) { m.RLock() t, ok := topics[name] m.RUnlock() if ok { return t, nil } t, err = topic.New(name, topicConfig) if err != nil { return t, logex.Trace(err) } m.Lock() topics[name] = t m.Unlock() return t, nil }
func (m *Muxque) getTopic(name string) (*topic.Ins, error) { var err error m.RLock() ins := m.topics[name] m.RUnlock() if ins != nil { return ins, nil } m.Lock() defer m.Unlock() // check again ins = m.topics[name] if ins != nil { return ins, nil } ins, err = topic.New(name, m.topicCfg) if err != nil { return nil, logex.Trace(err) } m.topics[name] = ins return ins, nil }