Less memory allocations

This commit is contained in:
Sergey Matveev 2015-10-06 10:59:49 +03:00
parent e80115cf69
commit e9a315574b
2 changed files with 20 additions and 13 deletions

View File

@ -48,7 +48,7 @@ type Daemon struct {
hostname *string hostname *string
motd *string motd *string
passwords *string passwords *string
clients map[*Client]bool clients map[*Client]struct{}
clientAliveness map[*Client]*ClientAlivenessState clientAliveness map[*Client]*ClientAlivenessState
rooms map[string]*Room rooms map[string]*Room
roomSinks map[*Room]chan ClientEvent 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 { func NewDaemon(version string, hostname, motd, passwords *string, logSink chan<- LogEvent, stateSink chan<- StateEvent) *Daemon {
daemon := Daemon{ daemon := Daemon{
version: version, version: version,
hostname: hostname, hostname: hostname,
motd: motd, motd: motd,
passwords: passwords, passwords: passwords,
} }
daemon.clients = make(map[*Client]bool) daemon.clients = make(map[*Client]struct{})
daemon.clientAliveness = make(map[*Client]*ClientAlivenessState) daemon.clientAliveness = make(map[*Client]*ClientAlivenessState)
daemon.rooms = make(map[string]*Room) daemon.rooms = make(map[string]*Room)
daemon.roomSinks = make(map[*Room]chan ClientEvent) 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) { func (daemon *Daemon) Processor(events <-chan ClientEvent) {
var now time.Time
for event := range events { for event := range events {
now := time.Now() now = time.Now()
client := event.client client := event.client
// Check for clients aliveness // Check for clients aliveness
@ -334,9 +335,9 @@ func (daemon *Daemon) Processor(events <-chan ClientEvent) {
switch event.eventType { switch event.eventType {
case EventNew: case EventNew:
daemon.clients[client] = true daemon.clients[client] = struct{}{}
daemon.clientAliveness[client] = &ClientAlivenessState{ daemon.clientAliveness[client] = &ClientAlivenessState{
pingSent: false, pingSent: false,
timestamp: now, timestamp: now,
} }
case EventDel: case EventDel:

View File

@ -66,9 +66,12 @@ func Logger(logdir string, events <-chan LogEvent) {
mode := os.O_CREATE | os.O_WRONLY | os.O_APPEND mode := os.O_CREATE | os.O_WRONLY | os.O_APPEND
perm := os.FileMode(0660) perm := os.FileMode(0660)
var format string var format string
var logfile string
var fd *os.File
var err error
for event := range events { for event := range events {
logfile := path.Join(logdir, event.where) logfile = path.Join(logdir, event.where)
fd, err := os.OpenFile(logfile, mode, perm) fd, err = os.OpenFile(logfile, mode, perm)
if err != nil { if err != nil {
log.Println("Can not open logfile", logfile, err) log.Println("Can not open logfile", logfile, err)
continue continue
@ -96,10 +99,13 @@ type StateEvent struct {
// Room states shows that either topic or key has been changed // Room states shows that either topic or key has been changed
// Each room's state is written to separate file in statedir // Each room's state is written to separate file in statedir
func StateKeeper(statedir string, events <-chan StateEvent) { func StateKeeper(statedir string, events <-chan StateEvent) {
var fn string
var data string
var err error
for event := range events { for event := range events {
fn := path.Join(statedir, event.where) fn = path.Join(statedir, event.where)
data := event.topic + "\n" + event.key + "\n" data = event.topic + "\n" + event.key + "\n"
err := ioutil.WriteFile(fn, []byte(data), os.FileMode(0660)) err = ioutil.WriteFile(fn, []byte(data), os.FileMode(0660))
if err != nil { if err != nil {
log.Printf("Can not write statefile %s: %v", fn, err) log.Printf("Can not write statefile %s: %v", fn, err)
} }