As the title says, hangup() is called multiple times for no reason.
An example: Calling *97 and pressing # to end the call produces this:
-- Executing [*97@from-internal:107] GotoIf("SIP/123-00000000", "0?playret") in new stack
-- Executing [*97@from-internal:108] Macro("SIP/123-00000000", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/123-00000000", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] Hangup("SIP/123-00000000", "") in new stack
== Spawn extension (macro-hangupcall, s, 3) exited non-zero on 'SIP/123-00000000' in macro 'hangupcall'
== Spawn extension (from-internal, *97, 108) exited non-zero on 'SIP/123-00000000'
-- Executing [h@from-internal:1] Hangup("SIP/123-00000000", "") in new stack
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/123-00000000'
Somebody should also look at the output from
dialplan show h@from-internal
dialplan show h@ext-did-catchall
as this also generates double Hangup()