From: Russell Bryant Date: Mon, 31 Jul 2006 17:27:42 +0000 (+0000) Subject: make the counting of ingress, outgress, and total frames thread-safe X-Git-Tag: 1.4.0-beta1~483 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93682ec72e3597bcd9ec29fc2b37c0994626d648;p=thirdparty%2Fasterisk.git 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 --- diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c index b8d979cda7..67341fc5e6 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; }