[asterisk-bugs] [JIRA] (ASTERISK-27920) Unconditional Call Forward:Failed after immediately hanging up.

Cao Minh Hiep (JIRA) noreply at issues.asterisk.org
Fri Jun 15 04:25:54 CDT 2018


Cao Minh Hiep created ASTERISK-27920:
----------------------------------------

             Summary: Unconditional Call Forward:Failed after immediately hanging up.
                 Key: ASTERISK-27920
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-27920
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Applications/app_queue
    Affects Versions: 13.21.0
         Environment: Asterisk v13.21.0, Telephone.
            Reporter: Cao Minh Hiep


Hello,
We found an issue when making an Unconditional Call Forward as the following:

1. Two phones A and phone B in two work groups.
2. Setup an Unconditional Call Forward from phone A to phone B.
3. Make a call from outside to phone A.
4. Phone A will be not ringing, it forwards to phone B.
5. Phone B will be ringing, then pick up phone B.
6. After picking up phone B, immediately hang up phone B.
7. Phone B has been hung up, however still hear ringing sound from the outside phone.
8. Queue log will output the message of "has another call trying, can't receive the call "
9. Hang up the outside phone then try to make another call.
10. Now we can hear ringing sound from outside phone but, phone B now is not ringing.


We investigated the issue and understood that:
1). It will happen 100% with the scenario above.
2). And It will not happen if picking up the phone and answer.
3). When making an unconditional call forward, the queue member of the phone A will be added to pending members container, and the queue member of the phone B will be not added to.
4). Normally, the added queue member will be removed after hung up the phone at update_queue().
5). When the issue happens, It will not be hung up in this way, therefore 
   the added queue member will not be removed. 
6). We tried to fix this issue by adding "pending_members_remove(member)" into the following code:
"if (ast_check_hangup(peer)) {
        /* Agent must have hung up */
	ast_log(LOG_WARNING, "Agent on %s hungup on the customer.\n", ast_channel_name(peer));
+   pending_members_remove(member);
	ast_queue_log(queuename, ast_channel_uniqueid(qe->chan), member->membername, "AGENTDUMP", "%s", "");
	blob = ast_json_pack("{s: s, s: s, s: s}", "Queue", queuename,
			                   "Interface", member->interface,
					   "MemberName", member->membername);
	queue_publish_multi_channel_blob(qe->chan, peer, 
                                                                 queue_agent_dump_type(), blob);
	ast_channel_publish_dial(qe->chan, peer, member->interface, 
        ast_hangup_cause_to_dial_status(ast_channel_hangupcause(peer)));
	ast_autoservice_chan_hangup_peer(qe->chan, peer);
	ao2_ref(member, -1);
	goto out;
} else if (ast_check_hangup(qe->chan)) {
"
Then, issue does not happen.

Please take a look at them and tell us the correct way to solve this issue.

Thank you.




--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list