Remove user from Server map when stopped

This commit is contained in:
Simon Ser 2020-08-07 15:31:07 +02:00
parent 6baa15ba14
commit 6598fcf36e
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48

View file

@ -79,12 +79,8 @@ func (s *Server) Run() error {
}
s.lock.Lock()
for _, record := range users {
s.Logger.Printf("starting bouncer for user %q", record.Username)
u := newUser(s, &record)
s.users[u.Username] = u
go u.run()
for i := range users {
s.addUserLocked(&users[i])
}
s.lock.Unlock()
@ -104,11 +100,7 @@ func (s *Server) createUser(user *User) (*user, error) {
return nil, fmt.Errorf("could not create user in db: %v", err)
}
s.Logger.Printf("starting bouncer for new user %q", user.Username)
u := newUser(s, user)
s.users[u.Username] = u
go u.run()
return u, nil
return s.addUserLocked(user), nil
}
func (s *Server) getUser(name string) *user {
@ -118,6 +110,22 @@ func (s *Server) getUser(name string) *user {
return u
}
func (s *Server) addUserLocked(user *User) *user {
s.Logger.Printf("starting bouncer for user %q", user.Username)
u := newUser(s, user)
s.users[u.Username] = u
go func() {
u.run()
s.lock.Lock()
delete(s.users, u.Username)
s.lock.Unlock()
}()
return u
}
var lastDownstreamID uint64 = 0
func (s *Server) handle(ic ircConn) {