Process different rooms in sync responses in goroutines
This commit is contained in:
@ -213,13 +213,6 @@ func (room *Room) Unload() bool {
|
||||
debug.Print("Unloading", room.ID)
|
||||
room.Save()
|
||||
room.state = nil
|
||||
room.topicCache = ""
|
||||
room.CanonicalAliasCache = ""
|
||||
room.firstMemberCache = nil
|
||||
room.secondMemberCache = nil
|
||||
room.memberCache = nil
|
||||
room.exMemberCache = nil
|
||||
room.replacedByCache = nil
|
||||
if room.postUnload != nil {
|
||||
room.postUnload()
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ type RoomCache struct {
|
||||
maxSize int
|
||||
maxAge int64
|
||||
getOwner func() id.UserID
|
||||
noUnload bool
|
||||
|
||||
Map map[id.RoomID]*Room
|
||||
head *Room
|
||||
@ -58,6 +59,14 @@ func NewRoomCache(listPath, directory string, maxSize int, maxAge int64, getOwne
|
||||
}
|
||||
}
|
||||
|
||||
func (cache *RoomCache) DisableUnloading() {
|
||||
cache.noUnload = true
|
||||
}
|
||||
|
||||
func (cache *RoomCache) EnableUnloading() {
|
||||
cache.noUnload = false
|
||||
}
|
||||
|
||||
func (cache *RoomCache) LoadList() error {
|
||||
cache.Lock()
|
||||
defer cache.Unlock()
|
||||
@ -160,6 +169,9 @@ func (cache *RoomCache) Touch(roomID id.RoomID) {
|
||||
}
|
||||
|
||||
func (cache *RoomCache) TouchNode(node *Room) {
|
||||
if cache.noUnload || node.touch + 2 > time.Now().Unix() {
|
||||
return
|
||||
}
|
||||
cache.Lock()
|
||||
cache.touch(node)
|
||||
cache.Unlock()
|
||||
@ -200,6 +212,7 @@ func (cache *RoomCache) get(roomID id.RoomID) *Room {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cache *RoomCache) Put(room *Room) {
|
||||
cache.Lock()
|
||||
node := cache.get(room.ID)
|
||||
@ -283,6 +296,9 @@ func (cache *RoomCache) ForceClean() {
|
||||
}
|
||||
|
||||
func (cache *RoomCache) clean(force bool) {
|
||||
if cache.noUnload && !force {
|
||||
return
|
||||
}
|
||||
origSize := cache.size
|
||||
maxTS := time.Now().Unix() - cache.maxAge
|
||||
for cache.size > cache.maxSize {
|
||||
|
Reference in New Issue
Block a user