diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-07-31 17:27:42 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-07-31 17:27:42 +0000 |
commit | 9101f1b8e797b3cc45ee890a5f309289c970a3f3 (patch) | |
tree | 9937e20067d94dbf37966c23b44f52e5b5eebadb /channels/iax2-parser.c | |
parent | 2c36b95d3ffbff3aa38518d247acb938914458bd (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.c | 14 |
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; } |