Example #1
0
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
}
Example #2
0
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
}