From f32cebadb8c651d24ebc71d158a864fe2e861784 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Thu, 28 Apr 2016 23:20:41 +0200
Subject: MUC: Use a timestamp to keep track of when to unlock room instead of
 a timer (so timer does not unlock an evicted room)

---
 plugins/muc/lock.lib.lua | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

(limited to 'plugins')

diff --git a/plugins/muc/lock.lib.lua b/plugins/muc/lock.lib.lua
index e316c57c..15dd624b 100644
--- a/plugins/muc/lock.lib.lua
+++ b/plugins/muc/lock.lib.lua
@@ -14,14 +14,19 @@ local lock_room_timeout = module:get_option_number("muc_room_lock_timeout", 300)
 
 local function lock(room)
 	module:fire_event("muc-room-locked", {room = room;});
-	room._data.locked = true;
+	room._data.locked = os.time() + lock_room_timeout;
 end
 local function unlock(room)
 	module:fire_event("muc-room-unlocked", {room = room;});
 	room._data.locked = nil;
 end
 local function is_locked(room)
-	return not not room._data.locked;
+	local ts = room._data.locked or false;
+	if ts then
+		if ts < os.time() then return true; end
+		unlock(room);
+	end
+	return false;
 end
 
 if lock_rooms then
@@ -31,13 +36,6 @@ if lock_rooms then
 		-- Lock room at creation
 		local room = event.room;
 		lock(room);
-		if lock_room_timeout and lock_room_timeout > 0 then
-			module:add_timer(lock_room_timeout, function ()
-				if is_locked(room) then
-					room:destroy(); -- Not unlocked in time
-				end
-			end);
-		end
 	end, 10);
 end
 
-- 
cgit v1.2.3