aboutsummaryrefslogtreecommitdiffstats
path: root/channels/iax2-parser.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-31 17:27:42 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-31 17:27:42 +0000
commit9101f1b8e797b3cc45ee890a5f309289c970a3f3 (patch)
tree9937e20067d94dbf37966c23b44f52e5b5eebadb /channels/iax2-parser.c
parent2c36b95d3ffbff3aa38518d247acb938914458bd (diff)
make the counting of ingress, outgress, and total frames thread-safe
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@38587 f38db490-d61c-443f-a65b-d21fe96a405b
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; }