summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2009-01-30 13:52:49 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2009-01-30 13:52:49 +0100
commitb54797da054a74144f10dfeb0daeca99decd9b12 (patch)
tree99b173ac46ff792d7401d60a0e78846e4b4eda18
parent2cfaf5f86a4fb40cc37ae71118c506f1d924df13 (diff)
parenta2bfabc1c0cb1afd02d53ae731779486b566ddb6 (diff)
downloadrsyslog-b54797da054a74144f10dfeb0daeca99decd9b12.tar.gz
rsyslog-b54797da054a74144f10dfeb0daeca99decd9b12.tar.xz
rsyslog-b54797da054a74144f10dfeb0daeca99decd9b12.zip
Merge branch 'v3-stable' into beta, conclude fix for race
Conflicts: ChangeLog runtime/msg.c
-rw-r--r--ChangeLog6
-rw-r--r--runtime/msg.c7
-rw-r--r--runtime/msg.h1
-rw-r--r--tools/syslogd.c2
4 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 99e50b8a..f7353cca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -146,6 +146,12 @@ Version 3.21.0 [DEVEL] (rgerhards), 2008-07-18
- imported all changes from 3.18.1 until today (some quite important,
see below)
---------------------------------------------------------------------------
+Version 3.20.4 [v3-stable] (rgerhards), 2009-02-??
+- bugfix: inconsistent use of mutex/atomic operations could cause segfault
+ details are too many, for full analysis see blog post at:
+ http://blog.gerhards.net/2009/01/rsyslog-data-race-analysis.html
+- bugfix: invalid mutex access in msg.c
+---------------------------------------------------------------------------
Version 3.20.3 [v3-stable] (rgerhards), 2009-01-19
- doc bugfix: v3-compatiblity document had typo in config directive
thanks to Andrej for reporting this
diff --git a/runtime/msg.c b/runtime/msg.c
index 038e002a..b995ac53 100644
--- a/runtime/msg.c
+++ b/runtime/msg.c
@@ -190,6 +190,7 @@ static void MsgPrepareEnqueueLockingCase(msg_t *pThis)
* rgerhards, 2008-07-14
*/
pthread_mutexattr_destroy(&pThis->mutAttr);
+ pThis->bDoLock = 1;
ENDfunc
}
@@ -199,14 +200,16 @@ static void MsgLockLockingCase(msg_t *pThis)
{
/* DEV debug only! dbgprintf("MsgLock(0x%lx)\n", (unsigned long) pThis); */
assert(pThis != NULL);
- pthread_mutex_lock(&pThis->mut);
+ if(pThis->bDoLock == 1) /* TODO: this is a testing hack, we should find a way with better performance! -- rgerhards, 2009-01-27 */
+ pthread_mutex_lock(&pThis->mut);
}
static void MsgUnlockLockingCase(msg_t *pThis)
{
/* DEV debug only! dbgprintf("MsgUnlock(0x%lx)\n", (unsigned long) pThis); */
assert(pThis != NULL);
- pthread_mutex_unlock(&pThis->mut);
+ if(pThis->bDoLock == 1) /* TODO: this is a testing hack, we should find a way with better performance! -- rgerhards, 2009-01-27 */
+ pthread_mutex_unlock(&pThis->mut);
}
/* delete the mutex object on message destruction (locking case)
diff --git a/runtime/msg.h b/runtime/msg.h
index 21cb2c64..1bad9c66 100644
--- a/runtime/msg.h
+++ b/runtime/msg.h
@@ -51,6 +51,7 @@
struct msg {
BEGINobjInstance; /* Data to implement generic object - MUST be the first data element! */
pthread_mutexattr_t mutAttr;
+short bDoLock; /* use the mutex? */
pthread_mutex_t mut;
int iRefCount; /* reference counter (0 = unused) */
short bParseHOSTNAME; /* should the hostname be parsed from the message? */
diff --git a/tools/syslogd.c b/tools/syslogd.c
index bc1f71d3..1447d868 100644
--- a/tools/syslogd.c
+++ b/tools/syslogd.c
@@ -1622,7 +1622,7 @@ logmsg(msg_t *pMsg, int flags)
assert(pMsg != NULL);
assert(pMsg->pszUxTradMsg != NULL);
msg = (char*) pMsg->pszUxTradMsg;
- dbgprintf("logmsg: flags %x, pri %s, from '%s', msg %s\n", flags, getPRI(pMsg), getRcvFrom(pMsg), msg);
+ dbgprintf("logmsg: flags %x, from '%s', msg %s\n", flags, getRcvFrom(pMsg), msg);
/* rger 2005-11-24 (happy thanksgiving!): we now need to check if we have
* a traditional syslog message or one formatted according to syslog-protocol.