如何在启动竞争条件下避免pjsua断言失败?

时间:2014-07-22 02:14:28

标签: pjsip assertion

我正在使用PJSIP构建应用程序,特别是PJSUA组件。有时,如果在程序启动期间传入的INVITE到达,我将得到断言失败

../src/pjsua-lib/pjsua_acc.c:2777: pjsua_acc_find_for_incoming: Assertion `pjsua_var.acc_cnt!=0' failed.

pjsua_acc_find_for_incoming函数从pjsua_call_on_incoming无条件调用,在收到INVITE时从mod_pjsua_on_rx_request调用。

问题出现是因为我使用pjsua_acc_add_local,需要pjsua_transport_id来自pjsua_transport_create。因此,必须先创建传输,然后才能添加帐户。如果INVITE在中间时间到达,则会触发此断言。

1 个答案:

答案 0 :(得分:1)

事实证明,我的问题是由于在使用pjsua_init添加帐户之前调用了pjsua_startpjsua_acc_add_local。通过切换初始化顺序,以便在pjsua_acc_add_local之前调用pjsua_init,可以避免此问题。如果PJSUA模块未运行,则在创建帐户之前不可能有INVITE到达。

相关问题