我们有一个针对 Mobicents SIP Servlets 编写的应用程序,目前使用的是 v2.1.547,但我也针对 v3.1.633 进行了测试,并注意到了相同的行为。
我们的应用程序作为 B2BUA 工作,我们有一个传入的 SIP 呼叫,我们还有一个出站 SIP 呼叫被放置到正在执行 VXML 的 MRF。这两个 SIP 调用与单个 SipApplicationSession 相关联——这是我们配置的并发模型。
100% 的时间重新创建的场景如下:
- 向我们的应用程序发出的呼入电话(未接听电话)
- 拨打 MRF 的呼出电话
- 呼入电话挂断
- 应用程序尝试终止与出站呼叫关联的 SipSession
我看到这个被记录:
2015-12-17 09:53:56,771 WARN [SipApplicationSessionImpl] (MSS-Executor-Thread-14) 无法获取会话信号量 java.util.concurrent.Semaphore@55fcc0cb[Permits = 0] 30 秒。无论如何,我们都会解锁信号量,因为事务即将超时。这也可能是并发控制风险。应用会话 is5faf5a3a-6a83-4f23-a30a-57d3eff3281c;SipController
我愿意相信我们的应用程序可能会以某种方式触发这种行为,但我目前不知道如何。我会认为获取/释放信号量都是实现内部的,所以它应该确保某些东西不会获取信号量并且永远不会释放它?
任何有关如何深入了解这一点的指针都将不胜感激,因为我说过它是 100% 可重复的,因此获取日志等都是可能的。