[Freeswitch-users] Playback race condition

Hynek Cihlar hynek.cihlar at gmail.com
Mon Nov 21 22:10:07 MSK 2011


I send execute playback at time t0. I send execute break all also at time
t0. Execute playback is queued in the channel queue. Execute break all is
also queued in the channel queue. Channel thread picks up the execute
playback, posts the execute notification, playback is queued for playback.
Channel thread picks up the execute break all command...

Now, what is the particular reason that channel thread cannot stop the
initiated playback?

Having to wait for the execute notification to be able to stop the playback
makes the esl protocol unnecessary complicated. It's like having to wait
for a TV to come up to be able to turn it off.

Sent from my mobile device

On Nov 21, 2011, at 18:01, Anthony Minessale <anthony.minessale at gmail.com>
wrote:

execute over event socket does the same thing as broadcast:

The channel is very busy, its doing I/O in a very critical loop in its own
thread.
You cannot simply gain access to it and make it start executing your
application because then it would be doing it inside that other thread and
possibly stopping it when it's supposed to be doing something else.

Instead the instruction is queued to the channel and the channel does
periodic calls to see if it has any tasks to execute when its tolerable to
perform such a task and also ensuring its carried out in it's own dedicated
session thread.

>From the time you send the command there is an expected latency until the
command is actually executed.  From your application you should send the
command then wait until you receive the channel_execute corresponding to
the desired command before continuing and having clearance to send the
uuid_break.



On Sun, Nov 20, 2011 at 2:07 AM, Hynek Cihlar <hynek.cihlar at gmail.com>wrote:

> So why would the bgapi uuid_break all fail if it queues the same way as
> execute does?
>
> Hynek
>
>
>
>
> On Sun, Nov 20, 2011 at 4:27 AM, Anthony Minessale <
> anthony.minessale at gmail.com> wrote:
>
>> Every way you are discussing does it the same way, doing it over bgapi
>> just wastes an extra thread for no reason.
>>
>> All of the above queue the command to the session and it will not execute
>> it until the next time its convenient for the session to execute
>> queued instructions.
>>
>> So any way you slice it, unless you wait for the execute event telling
>> you that the playback you tried to start, has actually started then its not
>> going to help.
>>
>> You are most likely trying to had implement some convention that is
>> dumbed down to one command already in FS so I suggest you re-evaluate what
>> you are even trying to do.
>>
>>
>>
>> On Sat, Nov 19, 2011 at 3:37 AM, Hynek Cihlar <hynek.cihlar at gmail.com>wrote:
>>
>>> So I changed the uuid_X-commands to execute and the use case with
>>> stopping tone playback works like a charm now!
>>>
>>> Regarding the blocking, you are right. I'm limiting blocking (and
>>> context switching) by handling all events and issuing commands always on
>>> one (and the same) thread per session. This design also allows me to
>>> simplify the programming model, decrease concurrency bugs, simplify
>>> debugging, etc. That's why the synthetic delay was giving me troubles since
>>> the events and commands must fly through as fast as possible.
>>>
>>> Thanks again!
>>>
>>> Hynek
>>>
>>>
>>>
>>>
>>> On Sat, Nov 19, 2011 at 10:28 AM, Peter Olsson <
>>> peter.olsson at visionutveckling.se> wrote:
>>>
>>>> bgapi can of course be used also, and in some cases you might still
>>>> need it. But the important thing to keep in mind when doing bgapi is to
>>>> handle the events correctly. When executing bgapi you will get a job-id
>>>> back, this job id must then be stored internally, so you can link this to
>>>> the background job event.
>>>>
>>>> I try to use the sendMsg/execute as much as possible, you will get
>>>> CHANNEL_EXECUTE/CHANNEL_EXECUTE_COMPLETE events, so you will always know
>>>> what's going on.
>>>>
>>>> I've only tested my system for about 100 concurrent calls, but that was
>>>> handled without any problems at all. What's really important is to make
>>>> really sure you never execute something that will block - since that will
>>>> cause everything to "hang".
>>>>
>>>> /Peter
>>>> ________________________________________
>>>> Från: freeswitch-users-bounces at lists.freeswitch.org [
>>>> freeswitch-users-bounces at lists.freeswitch.org] f&#246;r Hynek Cihlar [
>>>> hynek.cihlar at gmail.com]
>>>> Skickat: den 19 november 2011 10:04
>>>> Till: FreeSWITCH Users Help
>>>> Ämne: Re: [Freeswitch-users] Playback race condition
>>>>
>>>> Peter, thanks for pointing me to the right direction. I will try the
>>>> execute command, since queueing is exactly what I would need to preserve
>>>> consistency across commands (I had an impression that bgapi will give me
>>>> this consistency).
>>>>
>>>> Also I like to hear that it is possible to use a single connection
>>>> since I have designed the communication with one connection also. May I ask
>>>> how many concurrent sessions can your system handle?
>>>>
>>>> Hynek
>>>>
>>>>
>>>>
>>>> On Sat, Nov 19, 2011 at 9:35 AM, Peter Olsson <
>>>> peter.olsson at visionutveckling.se<mailto:
>>>> peter.olsson at visionutveckling.se>> wrote:
>>>> If you think about performance I would say it's better to handle this
>>>> without spawning lots of extra threads.
>>>>
>>>> First of all, most common commands can be queued into the the channel
>>>> thread using the execute method (
>>>> http://wiki.freeswitch.org/wiki/Mod_event_socket#execute), this makes
>>>> it possible to queue commands directly to the channel's thread, and the ESL
>>>> session will never wait for the result, it returns immediately.
>>>>
>>>> I've never used uuid_broadcast myself, so I'm not really sure how it's
>>>> handled, but by looking quickly in the code it looks like it shouldn't
>>>> block either, since it's actually just queuing a playback command to the
>>>> channel's thread.
>>>>
>>>> So basically, keep away from uuid_X-commands, and use execute method as
>>>> much as possible, and when using uuid_x-methods, make sure that won't block
>>>> - but if they do, make sure to handle handle the events for the bgapi
>>>> correctly.
>>>>
>>>> I've built a complete IVR system using these methods, with a single ESL
>>>> connection, and I've never had any performace issues.
>>>>
>>>> /Peter
>>>>
>>>> ________________________________________
>>>> Från: freeswitch-users-bounces at lists.freeswitch.org<mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org> [
>>>> freeswitch-users-bounces at lists.freeswitch.org<mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org>] f&#246;r Hynek Cihlar [
>>>> hynek.cihlar at gmail.com<mailto:hynek.cihlar at gmail.com>]
>>>> Skickat: den 19 november 2011 09:12
>>>> Till: FreeSWITCH Users Help
>>>> Ämne: Re: [Freeswitch-users] Playback race condition
>>>>
>>>> Two reasons I am not using api in this case.
>>>>
>>>> 1. Performance
>>>> 2. Doesn't seem to work
>>>>
>>>> 1. Blocking issuing the command will eventually reduce the system
>>>> throughput. Agree this is only a potential theoretical problem and I
>>>> haven't gotten into production where I could get the actual results.
>>>>
>>>> 2. When issuing api uuid_playback and api uuid_break right after, I'm
>>>> always getting an error response from the uuid_break. The ESL message body
>>>> is "-ERR no reply". Nothing in the logs (no idea which log type/level will
>>>> could generate other useful info).
>>>>
>>>> Hynek
>>>>
>>>>
>>>>
>>>> On Sat, Nov 19, 2011 at 8:48 AM, Peter Olsson <
>>>> peter.olsson at visionutveckling.se<mailto:
>>>> peter.olsson at visionutveckling.se><mailto:
>>>> peter.olsson at visionutveckling.se<mailto:
>>>> peter.olsson at visionutveckling.se>>> wrote:
>>>> Since you're using bgapi, it's impossible to guarantee that
>>>> uuid_broadcast has actually executed before you exeute uuid_break (they
>>>> will be executed in two different threads). You will have to do this in a
>>>> more controlled way (wait for events to show up etc.). And also, do you
>>>> really need to use bgapi all the time? I'm not sure how uuid_broadcast is
>>>> handled, but uuid_break is totally safe to use without bgapi, since it will
>>>> just update a flag and then return immediately. I think uuid_broadcast will
>>>> do the same thing - so getting rid of bgapi should be a good ebnough
>>>> solution.
>>>>
>>>> /Peter
>>>> ________________________________________
>>>> Från: freeswitch-users-bounces at lists.freeswitch.org<mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org><mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org<mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org>> [
>>>> freeswitch-users-bounces at lists.freeswitch.org<mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org><mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org<mailto:
>>>> freeswitch-users-bounces at lists.freeswitch.org>>] f&#246;r Hynek Cihlar
>>>> [hynek.cihlar at gmail.com<mailto:hynek.cihlar at gmail.com><mailto:
>>>> hynek.cihlar at gmail.com<mailto:hynek.cihlar at gmail.com>>]
>>>> Skickat: den 19 november 2011 08:31
>>>> Till: FreeSWITCH Users Help
>>>> Ämne: Re: [Freeswitch-users] Playback race condition
>>>>
>>>> As a workaround I put a synthetic a delay between the start and stop of
>>>> the playback. I wouldn't want to keep this solution however since it blocks
>>>> one of the worker threads (decreasing overall system throughput) and
>>>> second, I really don't know what the synthetic delay should be or whether
>>>> it could differ during different conditions like during a high load.
>>>>
>>>> Was anybody facing similar problem? How did you solve it? Am I using
>>>> the API wrong and is there another way to invoke playback/stop?
>>>>
>>>> Thanks!
>>>> Hynek
>>>>
>>>>
>>>>
>>>> On Fri, Nov 18, 2011 at 6:46 PM, Hynek Cihlar <hynek.cihlar at gmail.com
>>>> <mailto:hynek.cihlar at gmail.com><mailto:hynek.cihlar at gmail.com<mailto:
>>>> hynek.cihlar at gmail.com>><mailto:hynek.cihlar at gmail.com<mailto:
>>>> hynek.cihlar at gmail.com><mailto:hynek.cihlar at gmail.com<mailto:
>>>> hynek.cihlar at gmail.com>>>> wrote:
>>>> Hello all,
>>>>
>>>> I got on shaky grounds issuing commands to Freeswitch over ESL.
>>>>
>>>> For example, issuing the following commands close enough (on my system
>>>> at around 100 ms and less) causes troubles.
>>>>
>>>> bgapi uuid_broadcast 71f8f250-8ad6-4ab3-855a-3cbc71075fe2
>>>> playback::tone_stream://%(150,4000,425);loops=-1
>>>> <100ms appart
>>>> bgapi uuid_break 71f8f250-8ad6-4ab3-855a-3cbc71075fe2 all
>>>> previous playback is not stopped, the following is queued (not played)
>>>> bgapi uuid_broadcast 71f8f250-8ad6-4ab3-855a-3cbc71075fe2
>>>> playback::tone_stream://%(1000,4000,425);loops=-1
>>>>
>>>> It looks like the first tone playback is not properly initialized when
>>>> the break arrives. Waiting for the start of the first tone playback
>>>> (waiting for the right event) is not a solution, I don't want the tone to
>>>> be played at all if the events come this close.
>>>>
>>>> Any ideas?
>>>>
>>>>
>>>> Hynek
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _________________________________________________________________________
>>>> Professional FreeSWITCH Consulting Services:
>>>> consulting at freeswitch.org<mailto:consulting at freeswitch.org><mailto:
>>>> consulting at freeswitch.org<mailto:consulting at freeswitch.org>>
>>>> http://www.freeswitchsolutions.com
>>>>
>>>> 
>>>> 
>>>>
>>>> Official FreeSWITCH Sites
>>>> http://www.freeswitch.org
>>>> http://wiki.freeswitch.org
>>>> http://www.cluecon.com
>>>>
>>>> FreeSWITCH-users mailing list
>>>> FreeSWITCH-users at lists.freeswitch.org<mailto:
>>>> FreeSWITCH-users at lists.freeswitch.org><mailto:
>>>> FreeSWITCH-users at lists.freeswitch.org<mailto:
>>>> FreeSWITCH-users at lists.freeswitch.org>>
>>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> UNSUBSCRIBE:
>>>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>> http://www.freeswitch.org
>>>>
>>>>
>>>>
>>>>
>>>> _________________________________________________________________________
>>>> Professional FreeSWITCH Consulting Services:
>>>> consulting at freeswitch.org<mailto:consulting at freeswitch.org>
>>>> http://www.freeswitchsolutions.com
>>>>
>>>> 
>>>> 
>>>>
>>>> Official FreeSWITCH Sites
>>>> http://www.freeswitch.org
>>>> http://wiki.freeswitch.org
>>>> http://www.cluecon.com
>>>>
>>>> FreeSWITCH-users mailing list
>>>> FreeSWITCH-users at lists.freeswitch.org<mailto:
>>>> FreeSWITCH-users at lists.freeswitch.org>
>>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> UNSUBSCRIBE:
>>>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>> http://www.freeswitch.org
>>>>
>>>> !DSPAM:4ec770ca32761488716642!
>>>>
>>>>
>>>> _________________________________________________________________________
>>>> Professional FreeSWITCH Consulting Services:
>>>> consulting at freeswitch.org
>>>> http://www.freeswitchsolutions.com
>>>>
>>>> 
>>>> 
>>>>
>>>> Official FreeSWITCH Sites
>>>> http://www.freeswitch.org
>>>> http://wiki.freeswitch.org
>>>> http://www.cluecon.com
>>>>
>>>> FreeSWITCH-users mailing list
>>>> FreeSWITCH-users at lists.freeswitch.org
>>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> UNSUBSCRIBE:
>>>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>> http://www.freeswitch.org
>>>>
>>>
>>>
>>> _________________________________________________________________________
>>> Professional FreeSWITCH Consulting Services:
>>> consulting at freeswitch.org
>>> http://www.freeswitchsolutions.com
>>>
>>> 
>>> 
>>>
>>> Official FreeSWITCH Sites
>>> http://www.freeswitch.org
>>> http://wiki.freeswitch.org
>>> http://www.cluecon.com
>>>
>>> FreeSWITCH-users mailing list
>>> FreeSWITCH-users at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> http://www.freeswitch.org
>>>
>>>
>>
>>
>> --
>> Anthony Minessale II
>>
>> FreeSWITCH http://www.freeswitch.org/
>> ClueCon http://www.cluecon.com/
>> Twitter: http://twitter.com/FreeSWITCH_wire
>>
>> AIM: anthm
>> MSN:anthony_minessale at hotmail.com
>> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
>> IRC: irc.freenode.net #freeswitch
>>
>> FreeSWITCH Developer Conference
>> sip:888 at conference.freeswitch.org <sip%3A888 at conference.freeswitch.org>
>> googletalk:conf+888 at conference.freeswitch.org
>> pstn:+19193869900
>>
>> _________________________________________________________________________
>> Professional FreeSWITCH Consulting Services:
>> consulting at freeswitch.org
>> http://www.freeswitchsolutions.com
>>
>> 
>> 
>>
>> Official FreeSWITCH Sites
>> http://www.freeswitch.org
>> http://wiki.freeswitch.org
>> http://www.cluecon.com
>>
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> 
> 
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://wiki.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>


-- 
Anthony Minessale II

FreeSWITCH http://www.freeswitch.org/
ClueCon http://www.cluecon.com/
Twitter: http://twitter.com/FreeSWITCH_wire

AIM: anthm
MSN:anthony_minessale at hotmail.com
GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
IRC: irc.freenode.net #freeswitch

FreeSWITCH Developer Conference
sip:888 at conference.freeswitch.org <sip%3A888 at conference.freeswitch.org>
googletalk:conf+888 at conference.freeswitch.org
pstn:+19193869900

_________________________________________________________________________
Professional FreeSWITCH Consulting Services:
consulting at freeswitch.org
http://www.freeswitchsolutions.com




Official FreeSWITCH Sites
http://www.freeswitch.org
http://wiki.freeswitch.org
http://www.cluecon.com

FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20111121/8db04d90/attachment-0001.html 


Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list