In my opinion the question is principle, but these are the files and traces that you mentioned, if you think it will help:
Debug of a call
-- Executing Goto("SIP/5060-081ac520", "incoming|1|1") in new stack
-- Goto (incoming,1,1)
-- Executing System("SIP/5060-081ac520", "cp /var/spool/asterisk/gsm.call /var/spool/asterisk/outgoing/") in new stack
-- Executing Hangup("SIP/5060-081ac520", "") in new stack
== Spawn extension (incoming, 1, 2) exited non-zero on ‘SIP/5060-081ac520’
– Attempting call on SIP/43338351004210@ch3 for s@dialtone:1 (Retry 1)
– Executing Answer(“SIP/ch3-081b5488”, “”) in new stack
– Executing Playback(“SIP/ch3-081b5488”, “dial_now”) in new stack
– Playing ‘dial_now’ (language ‘en’)
– Executing DISA(“SIP/ch3-081b5488”, “no-password|out”) in new stack
– Executing Dial(“SIP/ch3-081b5488”, “SIP/18002416522@ch3”) in new stack
– Called 18002416522@ch3
– SIP/ch3-081ac520 is making progress passing it to SIP/ch3-081b5488
– SIP/ch3-081ac520 answered SIP/ch3-081b5488
– Attempting native bridge of SIP/ch3-081b5488 and SIP/ch3-081ac520
{Here A and B on hook, but 2channels are still open next 90seconds}
== Spawn extension (out, 18002416522, 1) exited non-zero on ‘SIP/ch3-081b5488’
Oct 2 13:09:42 NOTICE[11643]: pbx_spool.c:279 attempt_thread: Call completed to SIP/43338351004210@ch3
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
example of the call file
gsm.call>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Channel: SIP/43338351004210@ch3
MaxRetries: 1
RetryTime: 3
Context: dialtone
Extension: s
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
dialplan
[incoming]
exten => 1,1,system(cp /var/spool/asterisk/gsm.call /var/spool/asterisk/outgoing/)
exten => 1,2,HangUp
[dialtone];
exten => s,1,answer()
exten => s,2,Playback(dial_now)
exten => s,3,DISA(no-password|out)
[out]
exten => _X.,1,Dial(SIP/${EXTEN}@ch3
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
And here is my experiment with “WaitForSilenceâ€