-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3338/#review11210
-----------------------------------------------------------

Ship it!


Ship It!

- rmudgett


On March 14, 2014, 11:55 a.m., Mark Michelson wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3338/
> -----------------------------------------------------------
> 
> (Updated March 14, 2014, 11:55 a.m.)
> 
> 
> Review request for Asterisk Developers and rmudgett.
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> ARI tests were occasionally showing a channel being stuck forever in Stasis. 
> After looking at a live system where the problem was occurring, it became 
> clear that the channel was stuck trying to wait for a playback to finish. 
> However, it was also clear that the playback had been abandoned long ago.
> 
> When playing back a file to a channel that is in a bridge, the idea was to 
> queue the playfile action onto the corresponding bridge channel, and then 
> wait until the ARI custom playback function completed to signal that the 
> playback had finished. There were several ways that this could fail:
> * If the bridge channel were not found in the bridge, then we would never 
> attempt to queue the playfile action, but we would still try to wait for it 
> to finish happening.
> * If queuing the playfile action did not succeed, then we would still attempt 
> to wait for the action to occur.
> * If the playback action was successfully queued, but the bridge channel were 
> removed from the bridge before the playfile action could start, then the 
> playback would never happen, and we'd wait forever.
> 
> The responsibility of knowing whether a playfile action has conpleted or ever 
> will occur is the bridge's, since ARI can never fully know. With this in 
> mind, I have created a new bridge channel API call to queue a playfile action 
> synchronously. The way it is done, synchronous queuing operations could be 
> created for other bridge actions quite easily. A new frametype, 
> AST_FRAME_BRIDGE_ACTION_SYNC, contains a payload consisting of a 
> synchronization ID and the actual payload of the bridge action that is to be 
> queued. When the frame is queued, a synchronization structure is created and 
> added to a linked list. The procedure then blocks until it is told that the 
> frame has been disposed of.
> 
> When the frame gets freed (which will occur whether the playfile action 
> succeeds or does not happen), the freer of the frame signals the waiting 
> procedure that the playfile action has terminated, and control returns to 
> whoever queued the playfile action in the first place.
> 
> From ARI's perspective, this greatly simplifies its code. Most of the 
> res_stasis_playback changes are code removal. The bridge_channel changes, 
> though, are pretty large, which is why I've included Richard on this issue.
> 
> 
> Diffs
> -----
> 
>   /branches/12/res/res_stasis_playback.c 410558 
>   /branches/12/main/frame.c 410558 
>   /branches/12/main/channel.c 410558 
>   /branches/12/main/bridge_channel.c 410558 
>   /branches/12/include/asterisk/frame.h 410558 
>   /branches/12/include/asterisk/bridge_channel.h 410558 
>   /branches/12/funcs/func_frame_trace.c 410558 
>   /branches/12/bridges/bridge_softmix.c 410558 
> 
> Diff: https://reviewboard.asterisk.org/r/3338/diff/
> 
> 
> Testing
> -------
> 
> Initially, I did some manual playbacks using Swagger-UI to a channel in a 
> bridge to ensure that the specified file was actually being played as 
> promised. I also queued up several files in quick succession to ensure that 
> they played in series and not on top of each other.
> 
> In addition, I have created an automated test that is up for review at /r/3339
> 
> 
> Thanks,
> 
> Mark Michelson
> 
>

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to