Bladeren bron

load isupport directly into the config object

eliminates Server.configurableStateMutex
tags/v1.1.0-rc1
Shivaram Lingamneni 5 jaren geleden
bovenliggende
commit
ce6a3e42df
5 gewijzigde bestanden met toevoegingen van 49 en 58 verwijderingen
  1. 2
    1
      irc/client.go
  2. 7
    0
      irc/config.go
  3. 0
    7
      irc/getters.go
  4. 5
    1
      irc/isupport/list.go
  5. 35
    49
      irc/server.go

+ 2
- 1
irc/client.go Bestand weergeven

@@ -836,7 +836,8 @@ func (client *Client) LoggedIntoAccount() bool {
836 836
 func (client *Client) RplISupport(rb *ResponseBuffer) {
837 837
 	translatedISupport := client.t("are supported by this server")
838 838
 	nick := client.Nick()
839
-	for _, cachedTokenLine := range client.server.ISupport().CachedReply {
839
+	config := client.server.Config()
840
+	for _, cachedTokenLine := range config.Server.isupport.CachedReply {
840 841
 		length := len(cachedTokenLine) + 2
841 842
 		tokenline := make([]string, length)
842 843
 		tokenline[0] = nick

+ 7
- 0
irc/config.go Bestand weergeven

@@ -20,6 +20,7 @@ import (
20 20
 	"code.cloudfoundry.org/bytefmt"
21 21
 	"github.com/oragono/oragono/irc/connection_limits"
22 22
 	"github.com/oragono/oragono/irc/custime"
23
+	"github.com/oragono/oragono/irc/isupport"
23 24
 	"github.com/oragono/oragono/irc/languages"
24 25
 	"github.com/oragono/oragono/irc/logger"
25 26
 	"github.com/oragono/oragono/irc/modes"
@@ -293,6 +294,7 @@ type Config struct {
293 294
 			forceTrailing      bool
294 295
 			SendUnprefixedSasl bool `yaml:"send-unprefixed-sasl"`
295 296
 		}
297
+		isupport            isupport.List
296 298
 		ConnectionLimiter   connection_limits.LimiterConfig   `yaml:"connection-limits"`
297 299
 		ConnectionThrottler connection_limits.ThrottlerConfig `yaml:"connection-throttling"`
298 300
 	}
@@ -713,6 +715,11 @@ func LoadConfig(filename string) (config *Config, err error) {
713 715
 
714 716
 	config.loadMOTD()
715 717
 
718
+	err = config.generateISupport()
719
+	if err != nil {
720
+		return nil, err
721
+	}
722
+
716 723
 	// in the current implementation, we disable history by creating a history buffer
717 724
 	// with zero capacity. but the `enabled` config option MUST be respected regardless
718 725
 	// of this detail

+ 0
- 7
irc/getters.go Bestand weergeven

@@ -8,7 +8,6 @@ import (
8 8
 	"time"
9 9
 	"unsafe"
10 10
 
11
-	"github.com/oragono/oragono/irc/isupport"
12 11
 	"github.com/oragono/oragono/irc/languages"
13 12
 	"github.com/oragono/oragono/irc/modes"
14 13
 )
@@ -21,12 +20,6 @@ func (server *Server) SetConfig(config *Config) {
21 20
 	atomic.StorePointer(&server.config, unsafe.Pointer(config))
22 21
 }
23 22
 
24
-func (server *Server) ISupport() *isupport.List {
25
-	server.configurableStateMutex.RLock()
26
-	defer server.configurableStateMutex.RUnlock()
27
-	return server.isupport
28
-}
29
-
30 23
 func (server *Server) Limits() Limits {
31 24
 	return server.Config().Limits
32 25
 }

+ 5
- 1
irc/isupport/list.go Bestand weergeven

@@ -22,9 +22,13 @@ type List struct {
22 22
 // NewList returns a new List
23 23
 func NewList() *List {
24 24
 	var il List
25
+	il.Initialize()
26
+	return &il
27
+}
28
+
29
+func (il *List) Initialize() {
25 30
 	il.Tokens = make(map[string]*string)
26 31
 	il.CachedReply = make([][]string, 0)
27
-	return &il
28 32
 }
29 33
 
30 34
 // Add adds an RPL_ISUPPORT token to our internal list

+ 35
- 49
irc/server.go Bestand weergeven

@@ -62,37 +62,36 @@ type ListenerWrapper struct {
62 62
 
63 63
 // Server is the main Oragono server.
64 64
 type Server struct {
65
-	accounts               AccountManager
66
-	channels               ChannelManager
67
-	channelRegistry        ChannelRegistry
68
-	clients                ClientManager
69
-	config                 unsafe.Pointer
70
-	configFilename         string
71
-	configurableStateMutex sync.RWMutex // tier 1; generic protection for server state modified by rehash()
72
-	connectionLimiter      *connection_limits.Limiter
73
-	connectionThrottler    *connection_limits.Throttler
74
-	ctime                  time.Time
75
-	dlines                 *DLineManager
76
-	helpIndexManager       HelpIndexManager
77
-	isupport               *isupport.List
78
-	klines                 *KLineManager
79
-	listeners              map[string]*ListenerWrapper
80
-	logger                 *logger.Manager
81
-	monitorManager         *MonitorManager
82
-	motdLines              []string
83
-	name                   string
84
-	nameCasefolded         string
85
-	rehashMutex            sync.Mutex // tier 4
86
-	rehashSignal           chan os.Signal
87
-	pprofServer            *http.Server
88
-	resumeManager          ResumeManager
89
-	signals                chan os.Signal
90
-	snomasks               *SnoManager
91
-	store                  *buntdb.DB
92
-	torLimiter             connection_limits.TorLimiter
93
-	whoWas                 WhoWasList
94
-	stats                  Stats
95
-	semaphores             ServerSemaphores
65
+	accounts            AccountManager
66
+	channels            ChannelManager
67
+	channelRegistry     ChannelRegistry
68
+	clients             ClientManager
69
+	config              unsafe.Pointer
70
+	configFilename      string
71
+	connectionLimiter   *connection_limits.Limiter
72
+	connectionThrottler *connection_limits.Throttler
73
+	ctime               time.Time
74
+	dlines              *DLineManager
75
+	helpIndexManager    HelpIndexManager
76
+	isupport            *isupport.List
77
+	klines              *KLineManager
78
+	listeners           map[string]*ListenerWrapper
79
+	logger              *logger.Manager
80
+	monitorManager      *MonitorManager
81
+	motdLines           []string
82
+	name                string
83
+	nameCasefolded      string
84
+	rehashMutex         sync.Mutex // tier 4
85
+	rehashSignal        chan os.Signal
86
+	pprofServer         *http.Server
87
+	resumeManager       ResumeManager
88
+	signals             chan os.Signal
89
+	snomasks            *SnoManager
90
+	store               *buntdb.DB
91
+	torLimiter          connection_limits.TorLimiter
92
+	whoWas              WhoWasList
93
+	stats               Stats
94
+	semaphores          ServerSemaphores
96 95
 }
97 96
 
98 97
 var (
@@ -141,13 +140,12 @@ func NewServer(config *Config, logger *logger.Manager) (*Server, error) {
141 140
 }
142 141
 
143 142
 // setISupport sets up our RPL_ISUPPORT reply.
144
-func (server *Server) setISupport() (err error) {
143
+func (config *Config) generateISupport() (err error) {
145 144
 	maxTargetsString := strconv.Itoa(maxTargets)
146 145
 
147
-	config := server.Config()
148
-
149 146
 	// add RPL_ISUPPORT tokens
150
-	isupport := isupport.NewList()
147
+	isupport := &config.Server.isupport
148
+	isupport.Initialize()
151 149
 	isupport.Add("AWAYLEN", strconv.Itoa(config.Limits.AwayLen))
152 150
 	isupport.Add("CASEMAPPING", "ascii")
153 151
 	isupport.Add("CHANMODES", strings.Join([]string{modes.Modes{modes.BanMask, modes.ExceptMask, modes.InviteMask}.String(), "", modes.Modes{modes.UserLimit, modes.Key}.String(), modes.Modes{modes.InviteOnly, modes.Moderated, modes.NoOutside, modes.OpOnlyTopic, modes.ChanRoleplaying, modes.Secret}.String()}, ","))
@@ -175,13 +173,6 @@ func (server *Server) setISupport() (err error) {
175 173
 	isupport.Add("UTF8MAPPING", casemappingName)
176 174
 
177 175
 	err = isupport.RegenerateCachedReply()
178
-	if err != nil {
179
-		return
180
-	}
181
-
182
-	server.configurableStateMutex.Lock()
183
-	server.isupport = isupport
184
-	server.configurableStateMutex.Unlock()
185 176
 	return
186 177
 }
187 178
 
@@ -786,13 +777,8 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
786 777
 
787 778
 	// set RPL_ISUPPORT
788 779
 	var newISupportReplies [][]string
789
-	oldISupportList := server.ISupport()
790
-	err = server.setISupport()
791
-	if err != nil {
792
-		return err
793
-	}
794
-	if oldISupportList != nil {
795
-		newISupportReplies = oldISupportList.GetDifference(server.ISupport())
780
+	if oldConfig != nil {
781
+		newISupportReplies = oldConfig.Server.isupport.GetDifference(&config.Server.isupport)
796 782
 	}
797 783
 
798 784
 	// we are now open for business

Laden…
Annuleren
Opslaan