summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2008-03-12 21:19:30 +0000
committerMark Michelson <mmichelson@digium.com>2008-03-12 21:19:30 +0000
commita96b50580c3b14b6dbbb73ac4a6cb44cbf978702 (patch)
tree25570574fbb1ef39118dd20a5052024ca38d07a6
parenta3c7b08d19e0224fc5c1a71db90a666a73ee1f5f (diff)
Merged revisions 108227 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r108227 | mmichelson | 2008-03-12 16:16:28 -0500 (Wed, 12 Mar 2008) | 12 lines Added a large comment before the AST_SCHED_DEL macro to explain its purpose as well as when it is appropriate and when it is not appropriate to use it. I also removed the part of the debug message that mentions that this is probably a bug because there are some perfectly legitimate places where ast_sched_del may fail to delete an entry (e.g. when the scheduler callback manually reschedules with a new id instead of returning non-zero to tell the scheduler to reschedule with the same idea). I also raised the debug level of the debug message in AST_SCHED_DEL since it seems like it could come up quite frequently since the macro is probably being used in several places where it shouldn't be. Also removed the redundant line, file, and function information since that is provided by ast_log. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@108238 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--include/asterisk/sched.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/include/asterisk/sched.h b/include/asterisk/sched.h
index 28a14b847..3978e3299 100644
--- a/include/asterisk/sched.h
+++ b/include/asterisk/sched.h
@@ -35,6 +35,24 @@ extern "C" {
*/
#define SCHED_MAX_CACHE 128
+/*! \brief a loop construct to ensure that
+ * the scheduled task get deleted. The idea is that
+ * if we loop attempting to remove the scheduled task,
+ * then whatever callback had been running will complete
+ * and reinsert the task into the scheduler.
+ *
+ * Note that this is NOT always appropriate. This should
+ * only be used for tasks whose callback may return non-zero
+ * to indicate that the task needs to be rescheduled with the
+ * SAME id as previously.
+ *
+ * Some scheduler callbacks instead may reschedule the task themselves,
+ * thus removing the previous task id from the queue. If the task is rescheduled
+ * in this manner, then the id for the task will be different than before
+ * and so it makes no sense to use this macro. Note that if using the scheduler
+ * in this manner, it is perfectly acceptable for ast_sched_del to fail, and this
+ * macro should NOT be used.
+ */
#define AST_SCHED_DEL(sched, id) \
do { \
int _count = 0; \
@@ -42,7 +60,7 @@ extern "C" {
usleep(1); \
} \
if (_count == 10) \
- ast_log(LOG_DEBUG, "Unable to cancel schedule ID %d. This is probably a bug (%s: %s, line %d).\n", id, __FILE__, __PRETTY_FUNCTION__, __LINE__); \
+ ast_debug(3, "Unable to cancel schedule ID %d.\n", id); \
id = -1; \
} while (0);