unbreak the macro used for incrementing the frame counters.
authorLuigi Rizzo <rizzo@icir.org>
Mon, 18 Dec 2006 17:44:18 +0000 (17:44 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Mon, 18 Dec 2006 17:44:18 +0000 (17:44 +0000)
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: https://origsvn.digium.com/svn/asterisk/trunk@48568 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/channel.h

index 87f5efe..03613aa 100644 (file)
@@ -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,