ejabberd 18.12 Centos 7:mod_muc崩溃了

时间:2019-01-25 21:24:00

标签: ejabberd ejabberd-module

每当用户尝试通过客户端或ejabberctl创建聊天室时,模块就会崩溃:

** State machine <0.505.0> terminating
** Last event in was {route,<<"tom">>,{presence,<<"g245b-188">>,available,<<"en">>,{jid,<<"tom">>,<<"pccim">>,<<"Spark">>,<<"tom">>,<<"pccim">>,<<"Spark">>},{jid,<<"tom_q1r">>,<<"confere
** When State == normal_state
**      Data  == {state,<<"tom_q1r">>,<<"conference.pccim">>,<<"pccim">>,{[{allow,[all]}],muc_create,[{allow,[{acl,admin}]}],muc_create},{jid,<<"tom_q1r">>,<<"conference.pccim">>,<<>>,<<
** Reason for termination =
** {undef,[{maps,update_with,[<<"tom">>,#Fun<mod_muc_room.21.9948724>,[{<<"tom">>,<<"pccim">>,<<"Spark">>}],#{}],[]},{mod_muc_room,update_online_user,3,[{file,"src/mod_muc_room.erl"},{li
2019-01-25 16:14:22 =CRASH REPORT====
  crasher:
    initial call: gen:init_it/6
    pid: <0.505.0>
    registered_name: []
    exception exit: {{undef,[{maps,update_with,[<<"tom">>,#Fun<mod_muc_room.21.9948724>,[{<<"tom">>,<<"pccim">>,<<"Spark">>}],#{}],[]},{mod_muc_room,update_online_user,3,[{file,"src/mod_
    ancestors: [mod_muc_pccim,ejabberd_gen_mod_sup,ejabberd_sup,<0.38.0>]
    messages: []
    links: []
    dictionary: [{'$internal_queue_len',0}]
    trap_exit: true
    status: running
    heap_size: 2586
    stack_size: 27
    reductions: 1648
  neighbours:

我不知道出什么问题了,这是GA版本。我所做的唯一奇怪的事情是修改了v15 RPM规范以制作出RPM。

1 个答案:

答案 0 :(得分:0)

这些行是相关的:

** Reason for termination =
** {undef,[{maps,update_with,[<<"tom">>,#Fun<mod_muc_room.21.9948724>,[{<<"tom">>,<<"pccim">>,<<"Spark">>}],#{}],[]},

看来erlang无法调用功能maps:update_with / 4,自18.12(https://github.com/processone/ejabberd/commit/43498b39c18dcc90c94ed2ce32acdfe6e7381e87)起是必需的。

也许您使用的是旧的erlang版本,或者缺少erlang库。试试这个:

$ erl
Erlang/OTP 20 [erts-9.3.3.3] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [kernel-poll:false]

Eshell V9.3.3.3  (abort with ^G)
1> maps:module_info().
[{module,maps},
 {exports,[{update_with,3},
           {update_with,4},
...
2> q().

系统中的此示例显示我已经安装了地图库,并且支持带有4个参数的update_with。在您的系统中尝试一下,看看您能得到什么。