[Devel] fifo_t_reply bug ?
elias
elias.baixas at voztele.com
Wed May 10 20:24:41 CEST 2006
Hi all, I think I've found a bug regarding the fifo command
fifo_t_reply... the thing is that the INVITE transaction is put on wait
twice. Here's how it goes:
When one replies an INVITE with a success (200) response, this is (more
or less) the backtrace:
fifo_t_reply -> t_reply_with_body -> set_final_timer -> put_on_wait
then, when the ACK is received, the backtrace at t_newtran() is:
t_newtran -> t_release_transaction -> put_on_wait
in t_newtran, t_lookup_request() returns 1 because the ACK is local, so
t_newtran does a t_release_transaction, putting it on wait for second
time. So the transaction stays in the wait list forever.
Am I missing anything ?
the solution would be changing t_newtran from:
if (lret>0) {
if (p_msg->REQ_METHOD==METHOD_ACK) {
t_release_transaction(T);
} else {
t_retransmit_reply(T);
}
/* things are done -- return from script */
return 0;
}
to:
if (lret>0) {
if (p_msg->REQ_METHOD==METHOD_ACK &&
T->relaied_reply_branch != -2) {
t_release_transaction(T);
} else {
t_retransmit_reply(T);
}
/* things are done -- return from script */
return 0;
}
because relaied_reply_branch==-2 signals that a UAS transaction is
locally replied.
regards,
Elias
More information about the Devel
mailing list