Ver código fonte

fix: Avoids storing lobby room instance in the main room object.

We sometimes see "error   Top-level error, please report:
                  /usr/lib/prosody/util/serialization.lua:38: Can't serialize table: table has multiple references".
This also slows down restarting prosody.
master
damencho 5 anos atrás
pai
commit
734631a7a4
1 arquivos alterados com 18 adições e 12 exclusões
  1. 18
    12
      resources/prosody-plugins/mod_muc_lobby_rooms.lua

+ 18
- 12
resources/prosody-plugins/mod_muc_lobby_rooms.lua Ver arquivo

166
         new_room:set_persistent(true);
166
         new_room:set_persistent(true);
167
         module:log("debug","Lobby room jid = %s created",lobby_room_jid);
167
         module:log("debug","Lobby room jid = %s created",lobby_room_jid);
168
         new_room.main_room = room;
168
         new_room.main_room = room;
169
-        room._data.lobbyroom = new_room;
169
+        room._data.lobbyroom = new_room.jid;
170
         room:save(true);
170
         room:save(true);
171
         return true
171
         return true
172
     end
172
     end
178
     if not message then
178
     if not message then
179
         message = 'Lobby room closed.';
179
         message = 'Lobby room closed.';
180
     end
180
     end
181
-    if room and room._data.lobbyroom then
182
-        room._data.lobbyroom:set_persistent(false);
183
-        room._data.lobbyroom:destroy(newjid, message);
181
+    if lobby_muc_service and room and room._data.lobbyroom then
182
+        local lobby_room_obj = lobby_muc_service.get_room_from_jid(room._data.lobbyroom);
183
+        if lobby_room_obj then
184
+            lobby_room_obj:set_persistent(false);
185
+            lobby_room_obj:destroy(newjid, message);
186
+        end
184
         room._data.lobbyroom = nil;
187
         room._data.lobbyroom = nil;
185
     end
188
     end
186
 end
189
 end
315
                 label = 'Lobby room jid';
318
                 label = 'Lobby room jid';
316
                 value = '';
319
                 value = '';
317
             });
320
             });
318
-            event.formdata['muc#roominfo_lobbyroom'] = room._data.lobbyroom.jid;
321
+            event.formdata['muc#roominfo_lobbyroom'] = room._data.lobbyroom;
319
         end
322
         end
320
     end);
323
     end);
321
 
324
 
364
             local reply = st.error_reply(stanza, 'auth', 'registration-required'):up();
367
             local reply = st.error_reply(stanza, 'auth', 'registration-required'):up();
365
             reply.tags[1].attr.code = '407';
368
             reply.tags[1].attr.code = '407';
366
             reply:tag('x', {xmlns = MUC_NS}):up();
369
             reply:tag('x', {xmlns = MUC_NS}):up();
367
-            reply:tag('lobbyroom'):text(room._data.lobbyroom.jid);
370
+            reply:tag('lobbyroom'):text(room._data.lobbyroom);
368
             event.origin.send(reply:tag('x', {xmlns = MUC_NS}));
371
             event.origin.send(reply:tag('x', {xmlns = MUC_NS}));
369
             return true;
372
             return true;
370
         end
373
         end
377
         local from = stanza:get_child('x', 'http://jabber.org/protocol/muc#user')
380
         local from = stanza:get_child('x', 'http://jabber.org/protocol/muc#user')
378
             :get_child('invite').attr.from;
381
             :get_child('invite').attr.from;
379
 
382
 
380
-        if room._data.lobbyroom then
381
-            local occupant = room._data.lobbyroom:get_occupant_by_real_jid(invitee);
382
-            if occupant then
383
-                local display_name = occupant:get_presence():get_child_text(
384
-                    'nick', 'http://jabber.org/protocol/nick');
383
+        if lobby_muc_service and room._data.lobbyroom then
384
+            local lobby_room_obj = lobby_muc_service.get_room_from_jid(room._data.lobbyroom);
385
+            if lobby_room_obj then
386
+                local occupant = lobby_room_obj:get_occupant_by_real_jid(invitee);
387
+                if occupant then
388
+                    local display_name = occupant:get_presence():get_child_text(
389
+                            'nick', 'http://jabber.org/protocol/nick');
385
 
390
 
386
-                notify_lobby_access(room, from, occupant.nick, display_name, true);
391
+                    notify_lobby_access(room, from, occupant.nick, display_name, true);
392
+                end
387
             end
393
             end
388
         end
394
         end
389
     end);
395
     end);

Carregando…
Cancelar
Salvar