summaryrefslogtreecommitdiffstats
path: root/runtime/msg.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2010-04-27 17:49:06 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2010-04-27 17:49:06 +0200
commit4a5a3196fbe4e5a4e9f8dea49f916462adbf3098 (patch)
treedf7750c93603d4a979188f3385c9fe4997072c7f /runtime/msg.c
parent9cf1756dc6c06682b32ed7a789ceb4254b5792df (diff)
parentcbe2e3d44496ec7c6418e7e74ce917f2086a2947 (diff)
downloadrsyslog-4a5a3196fbe4e5a4e9f8dea49f916462adbf3098.tar.gz
rsyslog-4a5a3196fbe4e5a4e9f8dea49f916462adbf3098.tar.xz
rsyslog-4a5a3196fbe4e5a4e9f8dea49f916462adbf3098.zip
Merge branch 'v4-devel' into master
Conflicts: runtime/Makefile.am runtime/atomic.h runtime/queue.c runtime/queue.h runtime/wti.c runtime/wti.h runtime/wtp.c runtime/wtp.h
Diffstat (limited to 'runtime/msg.c')
-rw-r--r--runtime/msg.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/runtime/msg.c b/runtime/msg.c
index 5885cada..2c8c36a3 100644
--- a/runtime/msg.c
+++ b/runtime/msg.c
@@ -787,7 +787,7 @@ BEGINobjDestruct(msg) /* be sure to specify the object type also in END and CODE
CODESTARTobjDestruct(msg)
/* DEV Debugging only ! dbgprintf("msgDestruct\t0x%lx, Ref now: %d\n", (unsigned long)pThis, pThis->iRefCount - 1); */
# ifdef HAVE_ATOMIC_BUILTINS
- currRefCount = ATOMIC_DEC_AND_FETCH(pThis->iRefCount);
+ currRefCount = ATOMIC_DEC_AND_FETCH(&pThis->iRefCount, NULL);
# else
MsgLock(pThis);
currRefCount = --pThis->iRefCount;
@@ -843,9 +843,18 @@ CODESTARTobjDestruct(msg)
* that we trim too often when the counter wraps.
*/
static unsigned iTrimCtr = 1;
+# ifdef HAVE_ATOMICS
if(ATOMIC_INC_AND_FETCH(iTrimCtr) % 100000 == 0) {
malloc_trim(128*1024);
}
+# else
+static pthread_mutex_t mutTrimCtr = PTHREAD_MUTEX_INITIALIZER;
+ d_pthread_mutex_lock(&mutTrimCtr);
+ if(iTrimCtr++ % 100000 == 0) {
+ malloc_trim(128*1024);
+ }
+ d_pthread_mutex_unlock(&mutTrimCtr);
+# endif
}
# endif
} else {
@@ -1055,7 +1064,7 @@ msg_t *MsgAddRef(msg_t *pM)
{
assert(pM != NULL);
# ifdef HAVE_ATOMIC_BUILTINS
- ATOMIC_INC(pM->iRefCount);
+ ATOMIC_INC(&pM->iRefCount, NULL);
# else
MsgLock(pM);
pM->iRefCount++;