From 7045e5aa9121ac23e1ea1e5bd3d155c9776576c6 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Thu, 30 Oct 2008 19:31:40 +0000 Subject: [PATCH] Merged revisions 152887 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r152887 | russell | 2008-10-30 14:28:06 -0500 (Thu, 30 Oct 2008) | 7 lines Fix a bug in AST_SCHED_REPLACE_UNREF(). The reference count of the object _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/branches/1.6.1@152900 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/sched.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/asterisk/sched.h b/include/asterisk/sched.h index 92a5d76a49..ab328af959 100644 --- a/include/asterisk/sched.h +++ b/include/asterisk/sched.h @@ -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) \