Good morning Daniel.
I cannot test this issue because I have no means, so I deduce what's happening, and of course I could be mistaken.
1.- First BYE received, first listening process: dlg_onroute ->
..
/* run state machine */
switch ( req->first_line.u.request.method_value ) {
case METHOD_PRACK:
event = DLG_EVENT_REQPRACK; break;
case METHOD_ACK:
event = DLG_EVENT_REQACK; break;
case METHOD_BYE:
event = DLG_EVENT_REQBYE; break;
default:
event = DLG_EVENT_REQ;
}
next_state_dlg( dlg, event, &old_state, &new_state, &unref);
---------------------------------------------------------------------------- ------------> new_state: DLG_STATE_DELETED ; old_state: DLG_STATE_CONFIRMED
2.- Second BYE received, second listening process: dlg_onroute ->
...
/* run state machine */
switch ( req->first_line.u.request.method_value ) {
case METHOD_PRACK:
event = DLG_EVENT_REQPRACK; break;
case METHOD_ACK:
event = DLG_EVENT_REQACK; break;
case METHOD_BYE:
event = DLG_EVENT_REQBYE; break;
default:
event = DLG_EVENT_REQ;
}
next_state_dlg( dlg, event, &old_state, &new_state, &unref);
---------------------------------------------------------------------------- ------------> new_state: DLG_STATE_DELETED ; old_state: DLG_STATE_DELETED
...
done:
dlg_release(dlg); ---> before first process related callbacks are executed by other processes like acc_cdr.c
return;
Thanks and best regards.