[asterisk-commits] trunk r21933 - in /trunk: ./ apps/
include/asterisk/
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Fri Apr 21 07:49:25 MST 2006
Author: rizzo
Date: Fri Apr 21 09:49:21 2006
New Revision: 21933
URL: http://svn.digium.com/view/asterisk?rev=21933&view=rev
Log:
- use symbolic constants and macros to play with the debug flag
on the frame counters. Document it in the header file.
- provide a single exit point for a function;
- mark XXX some unclear parts of the code.
Modified:
trunk/apps/app_dumpchan.c
trunk/channel.c
trunk/cli.c
trunk/include/asterisk/channel.h
Modified: trunk/apps/app_dumpchan.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_dumpchan.c?rev=21933&r1=21932&r2=21933&view=diff
==============================================================================
--- trunk/apps/app_dumpchan.c (original)
+++ trunk/apps/app_dumpchan.c Fri Apr 21 09:49:21 2006
@@ -114,8 +114,8 @@
c->nativeformats,
c->writeformat,
c->readformat,
- c->fds[0], c->fin & 0x7fffffff, (c->fin & 0x80000000) ? " (DEBUGGED)" : "",
- c->fout & 0x7fffffff, (c->fout & 0x80000000) ? " (DEBUGGED)" : "", (long)c->whentohangup,
+ c->fds[0], c->fin & ~DEBUGCHAN_FLAG, (c->fin & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "",
+ c->fout & ~DEBUGCHAN_FLAG, (c->fout & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "", (long)c->whentohangup,
hour,
min,
sec,
Modified: trunk/channel.c
URL: http://svn.digium.com/view/asterisk/trunk/channel.c?rev=21933&r1=21932&r2=21933&view=diff
==============================================================================
--- trunk/channel.c (original)
+++ trunk/channel.c Fri Apr 21 09:49:21 2006
@@ -2049,12 +2049,9 @@
}
/* High bit prints debugging */
- if (chan->fin & 0x80000000)
+ if (chan->fin & DEBUGCHAN_FLAG)
ast_frame_dump(chan->name, f, "<<");
- if ((chan->fin & 0x7fffffff) == 0x7fffffff)
- chan->fin &= 0x80000000;
- else
- chan->fin++;
+ chan->fin = FRAMECOUNT_INC(chan->fin);
done:
ast_mutex_unlock(&chan->lock);
@@ -2272,30 +2269,28 @@
/* Stop if we're a zombie or need a soft hangup */
ast_channel_lock(chan);
- if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan)) {
- ast_channel_unlock(chan);
- return -1;
- }
+ if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan))
+ goto done;
+
/* Handle any pending masquerades */
if (chan->masq && ast_do_masquerade(chan)) {
ast_log(LOG_WARNING, "Failed to perform masquerade\n");
- ast_channel_unlock(chan);
- return -1;
+ goto done;
}
if (chan->masqr) {
- ast_channel_unlock(chan);
- return 0;
+ res = 0; /* XXX explain, why 0 ? */
+ goto done;
}
if (chan->generatordata) {
if (ast_test_flag(chan, AST_FLAG_WRITE_INT))
ast_deactivate_generator(chan);
else {
- ast_channel_unlock(chan);
- return 0;
+ res = 0; /* XXX explain, why 0 ? */
+ goto done;
}
}
/* High bit prints debugging */
- if (chan->fout & 0x80000000)
+ if (chan->fout & DEBUGCHAN_FLAG)
ast_frame_dump(chan->name, fr, ">>");
CHECK_BLOCKING(chan);
switch(fr->frametype) {
@@ -2348,6 +2343,7 @@
queue_frame_to_spies(chan, f, SPY_WRITE);
if (chan->monitor && chan->monitor->write_stream) {
+ /* XXX must explain this code */
#ifndef MONITOR_CONSTANT_DELAY
int jump = chan->insmpl - chan->outsmpl - 4 * f->samples;
if (jump >= 0) {
@@ -2383,11 +2379,9 @@
if (res < 0)
chan->_softhangup |= AST_SOFTHANGUP_DEV;
else {
- if ((chan->fout & 0x7fffffff) == 0x7fffffff)
- chan->fout &= 0x80000000;
- else
- chan->fout++;
- }
+ chan->fout = FRAMECOUNT_INC(chan->fout);
+ }
+done:
ast_channel_unlock(chan);
return res;
}
Modified: trunk/cli.c
URL: http://svn.digium.com/view/asterisk/trunk/cli.c?rev=21933&r1=21932&r2=21933&view=diff
==============================================================================
--- trunk/cli.c (original)
+++ trunk/cli.c Fri Apr 21 09:49:21 2006
@@ -626,7 +626,6 @@
return RESULT_SUCCESS;
}
-#define DEBUGCHAN_FLAG 0x80000000
/* XXX todo: merge next two functions!!! */
static int handle_debugchan(int fd, int argc, char *argv[])
{
@@ -756,8 +755,10 @@
ast_getformatname_multiple(nf, sizeof(nf), c->nativeformats),
ast_getformatname_multiple(wf, sizeof(wf), c->writeformat),
ast_getformatname_multiple(rf, sizeof(rf), c->readformat),
- c->fds[0], c->fin & 0x7fffffff, (c->fin & 0x80000000) ? " (DEBUGGED)" : "",
- c->fout & 0x7fffffff, (c->fout & 0x80000000) ? " (DEBUGGED)" : "", (long)c->whentohangup,
+ c->fds[0],
+ c->fin & ~DEBUGCHAN_FLAG, (c->fin & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "",
+ c->fout & ~DEBUGCHAN_FLAG, (c->fout & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "",
+ (long)c->whentohangup,
cdrtime, c->_bridge ? c->_bridge->name : "<none>", ast_bridged_channel(c) ? ast_bridged_channel(c)->name : "<none>",
c->context, c->exten, c->priority, c->callgroup, c->pickupgroup, ( c->appl ? c->appl : "(N/A)" ),
( c-> data ? S_OR(c->data, "(Empty)") : "(None)"),
Modified: trunk/include/asterisk/channel.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/channel.h?rev=21933&r1=21932&r2=21933&view=diff
==============================================================================
--- trunk/include/asterisk/channel.h (original)
+++ trunk/include/asterisk/channel.h Fri Apr 21 09:49:21 2006
@@ -403,9 +403,13 @@
unsigned long insmpl;
unsigned long outsmpl;
- /* Frames in/out counters */
+ /* Frames in/out counters. The high bit is a debug mask, so
+ * the counter is only in the remaining bits
+ */
unsigned int fin;
unsigned int fout;
+#define DEBUGCHAN_FLAG 0x80000000
+#define FRAMECOUNT_INC(x) ( ((x) & DEBUGCHAN_FLAG) | ((x++) & ~DEBUGCHAN_FLAG) )
/* Why is the channel hanged up */
int hangupcause;
More information about the asterisk-commits
mailing list