From 8534be031275ff49db0599b6a766144d1048a0a8 Mon Sep 17 00:00:00 2001 From: Simon Eisenmann Date: Wed, 12 Mar 2014 10:30:06 +0100 Subject: [PATCH] Fixed panic when users disconnect while they were looped for Users request. --- .../spreed-speakfreely-server/roomworker.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/app/spreed-speakfreely-server/roomworker.go b/src/app/spreed-speakfreely-server/roomworker.go index 6aa7b4af..c27796ab 100644 --- a/src/app/spreed-speakfreely-server/roomworker.go +++ b/src/app/spreed-speakfreely-server/roomworker.go @@ -134,18 +134,22 @@ func (r *RoomWorker) usersHandler(c *Connection) { worker := func() { users := &DataUsers{Type: "Users"} - ul := users.Users + var ul []*DataUser appender := func(ec *Connection) bool { - user := ec.User.Data() - user.Type = "Online" - ul = append(ul, user) - if len(ul) > maxUsersLength { - log.Println("Limiting users response length in channel", r.Id) - return false + ecuser := ec.User + if (ecuser != nil) { + user := ecuser.Data() + user.Type = "Online" + ul = append(ul, user) + if len(ul) > maxUsersLength { + log.Println("Limiting users response length in channel", r.Id) + return false + } } return true } r.mutex.RLock() + ul = make([]*DataUser, 0, len(r.connections)) // Include connections in this room. for _, ec := range r.connections { if !appender(ec) {