]> granicus.if.org Git - ejabberd/commitdiff
check if a room is not persistent before starting a new one with the same name (EJAB...
authorEvgeniy Khramtsov <xramtsov@gmail.com>
Wed, 26 Aug 2009 04:14:54 +0000 (04:14 +0000)
committerEvgeniy Khramtsov <xramtsov@gmail.com>
Wed, 26 Aug 2009 04:14:54 +0000 (04:14 +0000)
SVN Revision: 2539

src/mod_muc/mod_muc.erl

index 22e8bb6e0c15e4257710da72de813dd8d43cd8e9..c0e2168ae827085ed7397bd3357779da9e95172c 100644 (file)
@@ -468,8 +468,7 @@ do_route1(Host, ServerHost, Access, HistorySize, RoomShaper,
                                                            AccessCreate, From,
                                                            Room) of
                                true ->
-                                   ?DEBUG("MUC: open new room '~s'~n", [Room]),
-                                   {ok, Pid} = mod_muc_room:start(
+                                   {ok, Pid} = start_new_room(
                                                  Host, ServerHost, Access,
                                                  Room, HistorySize,
                                                  RoomShaper, From,
@@ -538,6 +537,23 @@ load_permanent_rooms(Host, ServerHost, Access, HistorySize, RoomShaper) ->
              end, Rs)
     end.
 
+start_new_room(Host, ServerHost, Access, Room,
+              HistorySize, RoomShaper, From,
+              Nick, DefRoomOpts) ->
+    case mnesia:dirty_read(muc_room, {Room, Host}) of
+       [] ->
+           ?DEBUG("MUC: open new room '~s'~n", [Room]),
+           mod_muc_room:start(Host, ServerHost, Access,
+                              Room, HistorySize,
+                              RoomShaper, From,
+                              Nick, DefRoomOpts);
+       [#muc_room{opts = Opts}|_] ->
+           ?DEBUG("MUC: restore room '~s'~n", [Room]),
+           mod_muc_room:start(Host, ServerHost, Access,
+                              Room, HistorySize,
+                              RoomShaper, Opts)
+    end.
+
 register_room(Host, Room, Pid) ->
     F = fun() ->
                mnesia:write(#muc_online_room{name_host = {Room, Host},