[asterisk-dev] invasive fixes to chan_iax2 in 1.4

BJ Weschke bweschke at gmail.com
Fri Aug 17 15:28:02 CDT 2007


 +1 from my point of view. While this is new "core functionality" I
think it's necessary to fix bugs that wouldn't otherwise be fixed.

On 8/17/07, Russell Bryant <russell at digium.com> wrote:
> Greetings,
>
> I have a branch where I have fixed some bugs in chan_iax2.  The code is intended
> to go in both 1.4 and trunk.  The changes are rather invasive, so I wanted to
> describe the changes and justify them before merging them in.
>
> svn diff http://svn.digium.com/svn/asterisk/branches/1.4/channels/chan_iax2.c
> http://svn.digium.com/svn/asterisk/team/russell/iax_refcount/channels/chan_iax2.c
>
> This branch is targeted at fixing a set of crashes.  They were brought to my
> immediate attention by being given access to a system that could be easily
> crashed by issuing a reload while running a registration load test.
>
> The problems turned out to be related to the handling of iax2_peer objects.
> However, the handling of iax2_user objects suffers from the same problems so the
> same changes have been made to them, as well.  There are various situations
> where peers could get destroyed while other threads still hold references to them.
>
> To fix this problem, I made it so the objects are reference counted.  To do
> this, I had 3 choices.
>
> 1) Don't use any object model.  Just write it in "manually".  This felt like the
> worst choice.  It's best to use a common implementation when possible.
>
> 2) Use astobj.h.  This hasn't made it very far throughout the code base.  The
> API is a set of macros which are cumbersome to use, and especially to debug, in
> my opinion.  However, it's certainly better than option #1, as it is a common
> implementation already in use in some places.  However, it is likely that this
> is going to be deprecated in favor of astobj2.
>
> 3) Use astobj2.  Luigi Rizzo and one of his students, Marta Carbone, have
> written a new reference counted object model and have had it in a branch for a
> long time now.  After reviewing astobj versus astobj2, I perferred astobj2, and
> decided to go with that.  It doesn't use macros, and is still more efficient.
>
> Another reason that I chose to go with astobj2 was that I *know* this is not the
> end of problems of this type.  In fact, there is a nice set of crashes on the
> bug tracker which the fix will be converting the ast_channel struct over to a
> reference counted object model, which is going to be a big job.  Since we are
> likely going to have to do more conversions of object handling to this method, I
> figured it was worth bringing in astobj2 to 1.4 so that we can use it as needed,
> and not do all of this work using a model that we know will be deprecated in the
> near future.
>
> If you have any comments or objections, I would like to hear them.  Also, feel
> free to ask for any clarification or more detailed explanations of the things I
> have mentioned here.
>
> If there are no objections, I will be merging these changes into 1.4 next week.
>
> --
> Russell Bryant
> Software Engineer
> Digium, Inc.
>
> _______________________________________________
> --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
>


-- 
Bird's The Word Technologies, Inc.
http://www.btwtech.com/



More information about the asterisk-dev mailing list