aboutsummaryrefslogtreecommitdiffstats
path: root/include/asterisk
diff options
context:
space:
mode:
authorrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2006-12-18 17:44:18 +0000
committerrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2006-12-18 17:44:18 +0000
commitac4c61a13fba6c620ae2f0fbb218d1d2619d109f (patch)
treef9059e3dfbb59eb229dbb5a74408b841a6f51464 /include/asterisk
parent8b5bed10cbab42917612240f13524bc9d8ba82a8 (diff)
unbreak the macro used for incrementing the frame counters.
I don't know when the bug was introduced, but with the typical usage c->fin = FRAMECOUNT_INC(c->fin) the frame counters stay to 0. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@48568 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk')
-rw-r--r--include/asterisk/channel.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 87f5efea8..03613aadd 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -310,8 +310,21 @@ struct ast_channel_tech {
struct ast_channel_spy_list; /*!< \todo Add explanation here */
struct ast_channel_whisper_buffer; /*!< \todo Add explanation here */
+/*!
+ * The high bit of the frame count is used as a debug marker, so
+ * increments of the counters must be done with care.
+ * Please use c->fin = FRAMECOUNT_INC(c->fin) and the same for c->fout.
+ */
#define DEBUGCHAN_FLAG 0x80000000
-#define FRAMECOUNT_INC(x) ( ((x) & DEBUGCHAN_FLAG) | ((x++) & ~DEBUGCHAN_FLAG) )
+
+/* XXX not ideal to evaluate x twice... */
+#define FRAMECOUNT_INC(x) ( ((x) & DEBUGCHAN_FLAG) | (((x)+1) & ~DEBUGCHAN_FLAG) )
+
+/*!
+ * The current value of the debug flags is stored in the two
+ * variables global_fin and global_fout (declared in main/channel.c)
+ */
+extern unsigned long global_fin, global_fout;
enum ast_channel_adsicpe {
AST_ADSI_UNKNOWN,