summaryrefslogtreecommitdiff
path: root/channels/iax2-parser.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2006-07-31 17:27:42 +0000
committerRussell Bryant <russell@russellbryant.com>2006-07-31 17:27:42 +0000
commit93682ec72e3597bcd9ec29fc2b37c0994626d648 (patch)
tree9937e20067d94dbf37966c23b44f52e5b5eebadb /channels/iax2-parser.c
parent99cbcec567e63fa06ab71283c14969da09a28d71 (diff)
make the counting of ingress, outgress, and total frames thread-safe
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@38587 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/iax2-parser.c')
-rw-r--r--channels/iax2-parser.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c
index b8d979cda..67341fc5e 100644
--- a/channels/iax2-parser.c
+++ b/channels/iax2-parser.c
@@ -39,6 +39,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/frame.h"
#include "asterisk/utils.h"
#include "asterisk/unaligned.h"
+#include "asterisk/lock.h"
+
#include "iax2.h"
#include "iax2-parser.h"
#include "iax2-provision.h"
@@ -929,11 +931,11 @@ struct iax_frame *iax_frame_new(int direction, int datalen)
if (fr) {
fr->direction = direction;
fr->retrans = -1;
- frames++;
+ ast_atomic_fetchadd_int(&frames, 1);
if (fr->direction == DIRECTION_INGRESS)
- iframes++;
+ ast_atomic_fetchadd_int(&iframes, 1);
else
- oframes++;
+ ast_atomic_fetchadd_int(&oframes, 1);
}
return fr;
}
@@ -942,16 +944,16 @@ void iax_frame_free(struct iax_frame *fr)
{
/* Note: does not remove from scheduler! */
if (fr->direction == DIRECTION_INGRESS)
- iframes--;
+ ast_atomic_fetchadd_int(&iframes, -1);
else if (fr->direction == DIRECTION_OUTGRESS)
- oframes--;
+ ast_atomic_fetchadd_int(&oframes, -1);
else {
errorf("Attempt to double free frame detected\n");
return;
}
fr->direction = 0;
free(fr);
- frames--;
+ ast_atomic_fetchadd_int(&frames, -1);
}
int iax_get_frames(void) { return frames; }