diff options
author | Russell Bryant <russell@russellbryant.com> | 2006-07-31 17:27:42 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2006-07-31 17:27:42 +0000 |
commit | 93682ec72e3597bcd9ec29fc2b37c0994626d648 (patch) | |
tree | 9937e20067d94dbf37966c23b44f52e5b5eebadb /channels/iax2-parser.c | |
parent | 99cbcec567e63fa06ab71283c14969da09a28d71 (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.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; } |