[asterisk-commits] mmichelson: branch 1.4 r108227 - /branches/1.4/include/asterisk/sched.h
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Mar 12 16:16:29 CDT 2008
Author: mmichelson
Date: Wed Mar 12 16:16:28 2008
New Revision: 108227
URL: http://svn.digium.com/view/asterisk?view=rev&rev=108227
Log:
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.
Modified:
branches/1.4/include/asterisk/sched.h
Modified: branches/1.4/include/asterisk/sched.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/asterisk/sched.h?view=diff&rev=108227&r1=108226&r2=108227
==============================================================================
--- branches/1.4/include/asterisk/sched.h (original)
+++ branches/1.4/include/asterisk/sched.h Wed Mar 12 16:16:28 2008
@@ -35,13 +35,31 @@
*/
#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; \
while (id > -1 && ast_sched_del(sched, id) && ++_count < 10) \
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__); \
+ if (_count == 10 && option_debug > 2) \
+ ast_log(LOG_DEBUG, "Unable to cancel schedule ID %d.\n", id); \
id = -1; \
} while (0);
More information about the asterisk-commits
mailing list