]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix a bug in AST_SCHED_REPLACE_UNREF(). The reference count of the object
authorRussell Bryant <russell@russellbryant.com>
Thu, 30 Oct 2008 19:28:06 +0000 (19:28 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 30 Oct 2008 19:28:06 +0000 (19:28 +0000)
_must_ be increased before creating the scheduler entry.  Otherwise, you
create a race condition where the reference count may hit zero and the
object can disappear out from under you.  This could also would have
incorrectly decreased the reference count in the case that the scheduler
add failed.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@152887 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/sched.h

index 92a5d76a49f84cc688493cf508e5cefddf17b97f..ab328af959b72c90b448ad28178933266c4873e7 100644 (file)
@@ -113,11 +113,10 @@ extern "C" {
                        unrefcall;      /* should ref _data! */         \
                if (_count == 10) \
                        ast_log(LOG_WARNING, "Unable to cancel schedule ID %d.  This is probably a bug (%s: %s, line %d).\n", id, __FILE__, __PRETTY_FUNCTION__, __LINE__); \
+               refcall; \
                id = ast_sched_add_variable(sched, when, callback, data, variable); \
                if (id == -1)  \
                        addfailcall;    \
-               else \
-                       refcall; \
        } while (0);
 
 #define AST_SCHED_REPLACE_UNREF(id, sched, when, callback, data, unrefcall, addfailcall, refcall) \