]> Cypherpunks.ru repositories - goircd.git/commitdiff
Less memory allocations
authorSergey Matveev <stargrave@stargrave.org>
Tue, 6 Oct 2015 07:59:49 +0000 (10:59 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 6 Oct 2015 08:31:11 +0000 (11:31 +0300)
daemon.go
events.go

index 30d8c5ddc77a8e8980dcfa0a19e8d106e11ab4bb..b3fed28cb10f43be262351b172ce877de7504eab 100644 (file)
--- a/daemon.go
+++ b/daemon.go
@@ -48,7 +48,7 @@ type Daemon struct {
        hostname           *string
        motd               *string
        passwords          *string
-       clients            map[*Client]bool
+       clients            map[*Client]struct{}
        clientAliveness    map[*Client]*ClientAlivenessState
        rooms              map[string]*Room
        roomSinks          map[*Room]chan ClientEvent
@@ -59,12 +59,12 @@ type Daemon struct {
 
 func NewDaemon(version string, hostname, motd, passwords *string, logSink chan<- LogEvent, stateSink chan<- StateEvent) *Daemon {
        daemon := Daemon{
-               version: version,
-               hostname: hostname,
-               motd: motd,
+               version:   version,
+               hostname:  hostname,
+               motd:      motd,
                passwords: passwords,
        }
-       daemon.clients = make(map[*Client]bool)
+       daemon.clients = make(map[*Client]struct{})
        daemon.clientAliveness = make(map[*Client]*ClientAlivenessState)
        daemon.rooms = make(map[string]*Room)
        daemon.roomSinks = make(map[*Room]chan ClientEvent)
@@ -303,8 +303,9 @@ func (daemon *Daemon) HandlerJoin(client *Client, cmd string) {
 }
 
 func (daemon *Daemon) Processor(events <-chan ClientEvent) {
+       var now time.Time
        for event := range events {
-               now := time.Now()
+               now = time.Now()
                client := event.client
 
                // Check for clients aliveness
@@ -334,9 +335,9 @@ func (daemon *Daemon) Processor(events <-chan ClientEvent) {
 
                switch event.eventType {
                case EventNew:
-                       daemon.clients[client] = true
+                       daemon.clients[client] = struct{}{}
                        daemon.clientAliveness[client] = &ClientAlivenessState{
-                               pingSent: false,
+                               pingSent:  false,
                                timestamp: now,
                        }
                case EventDel:
index 843e8b59d8b407d2e96de3e334d77afab4219d80..44974b8c8914d91294cfd823e9b97713f09d3226 100644 (file)
--- a/events.go
+++ b/events.go
@@ -66,9 +66,12 @@ func Logger(logdir string, events <-chan LogEvent) {
        mode := os.O_CREATE | os.O_WRONLY | os.O_APPEND
        perm := os.FileMode(0660)
        var format string
+       var logfile string
+       var fd *os.File
+       var err error
        for event := range events {
-               logfile := path.Join(logdir, event.where)
-               fd, err := os.OpenFile(logfile, mode, perm)
+               logfile = path.Join(logdir, event.where)
+               fd, err = os.OpenFile(logfile, mode, perm)
                if err != nil {
                        log.Println("Can not open logfile", logfile, err)
                        continue
@@ -96,10 +99,13 @@ type StateEvent struct {
 // Room states shows that either topic or key has been changed
 // Each room's state is written to separate file in statedir
 func StateKeeper(statedir string, events <-chan StateEvent) {
+       var fn string
+       var data string
+       var err error
        for event := range events {
-               fn := path.Join(statedir, event.where)
-               data := event.topic + "\n" + event.key + "\n"
-               err := ioutil.WriteFile(fn, []byte(data), os.FileMode(0660))
+               fn = path.Join(statedir, event.where)
+               data = event.topic + "\n" + event.key + "\n"
+               err = ioutil.WriteFile(fn, []byte(data), os.FileMode(0660))
                if err != nil {
                        log.Printf("Can not write statefile %s: %v", fn, err)
                }