On 2012-01-31 at 14:15, Øyvind Kolbu wrote:
On 2012-01-31 at 14:06, Timo Reimann wrote:
I'm currently in the process of investigating
a dialog-related issue
together with Uri (see CC). It may be related to your problem, so let's
see if I can find something out that helps you as well. If not, I/we
should take a dedicated look at your case.
Unfortunately, I'm currently short on time so I cannot give any
guarantees as to when I'll find the time to get to these dialog-related
things. I promise to get back to you folks ASAP though, so please hang
on.
Great! We are currently running with full debugging enabled, so don't
hesitate to contact if you need some data.
Hi,
we've found that perhaps the cause of our problems are multiple identical
INVITEs at more or less the exact same time, +/- a few ms. This causes a race
within either the tm or dialog module, as it doesn't seem to cope well with
duplicates ~simultanously. Our fix is that we use the lock and unlock
commands from the cfgutils module together with a hashtable to check
for duplicates, and if so, drop them.
So our patch is more or less:
modparam("htable", "htable",
"cidhist=>size=8;autoexpire=10");
modparam("cfgutils", "lock_set_size", 8)
$avp(s:f_uid) is the username for our authenticated user and is set in
route(AUTH), then in main route, after route(AUTH):
if (is_method("INVITE")) {
if($(rU{s.len}) == 0)
{
xlog("L_INFO", "$avp(s:f_uid) tried to call an
empty number, dropping call\n");
sl_send_reply("404", "User Not Found");
exit;
}
lock($ci);
if($sht(cidhist=>$ci) != $null)
{
xlog("L_INFO", "DLG: We've already seen this
call-id before, we should drop this invite $ci\n");
unlock($ci);
exit;
} else
{
xlog("L_INFO", "DLG: This is a new invite,
let's start a dialog! $ci\n");
$sht(cidhist=>$ci) = 1;
setflag(3);
dlg_manage();
if ($avp(s:f_uid) != $null) {
set_dlg_profile("busy","$avp(s:f_uid)");
get_profile_size("busy", "$avp(s:f_uid)",
"$var(dlg_busy)");
xlog("L_INFO", "BUSY: f_uid: $avp(s:f_uid),
dlg_busy: $var(dlg_busy)\n");
}
}
unlock($ci);
}
Worth mentioning is that we also get REGISTER messages stuck in the
dialog-module, in state 1, but we only do setflag(3) and dlg_manage() for
INVITE. Againt probably caused by identical REGISTER messages. Any idea of
why?
--
Øyvind Kolbu