diff --git a/src/app/spreed-speakfreely-server/hub.go b/src/app/spreed-speakfreely-server/hub.go index ff78e499..33f92cc0 100644 --- a/src/app/spreed-speakfreely-server/hub.go +++ b/src/app/spreed-speakfreely-server/hub.go @@ -275,10 +275,14 @@ func (h *Hub) unregisterHandler(c *Connection) { h.mutex.Unlock() return } + user := c.User c.close() delete(h.connectionTable, c.Id) delete(h.userTable, c.Id) h.mutex.Unlock() + if user != nil { + h.buddyImages.DeleteUserImage(user.Id) + } //log.Printf("Unregister (%d) from %s: %s\n", c.Idx, c.RemoteAddr, c.Id) h.server.OnUnregister(c) diff --git a/src/app/spreed-speakfreely-server/images.go b/src/app/spreed-speakfreely-server/images.go index b519cf27..dd02b502 100644 --- a/src/app/spreed-speakfreely-server/images.go +++ b/src/app/spreed-speakfreely-server/images.go @@ -20,6 +20,8 @@ type ImageCache interface { Update(userId string, image string) string Get(imageId string) *Image + + DeleteUserImage(userId string) } type imageCache struct { @@ -97,3 +99,13 @@ func (self *imageCache) Get(imageId string) *Image { self.mutex.RUnlock() return image } + +func (self *imageCache) DeleteUserImage(userId string) { + self.mutex.Lock() + imageId, ok := self.userImages[userId] + if ok { + delete(self.userImages, userId) + delete(self.images, imageId) + } + self.mutex.Unlock() +}