mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-20 06:10:42 +01:00
bugfix: unitialized mutex was used in msg.c:getPRI
This was subtle, because getPRI is called as part of the debugging code (always executed) in syslogd.c:logmsg.
This commit is contained in:
parent
d5360aa574
commit
ead2c355e3
@ -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)
|
||||
@ -745,6 +748,7 @@ char *getMSG(msg_t *pM)
|
||||
char *getPRI(msg_t *pM)
|
||||
{
|
||||
int pri;
|
||||
BEGINfunc
|
||||
|
||||
if(pM == NULL)
|
||||
return "";
|
||||
@ -764,6 +768,7 @@ char *getPRI(msg_t *pM)
|
||||
}
|
||||
MsgUnlock(pM);
|
||||
|
||||
ENDfunc
|
||||
return (char*)pM->pszPRI;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
flowControl_t flowCtlType; /**< type of flow control we can apply, for enqueueing, needs not to be persisted because
|
||||
once data has entered the queue, this property is no longer needed. */
|
||||
|
||||
@ -2431,6 +2431,7 @@ init(void)
|
||||
ABORT_FINALIZE(RS_RET_VALIDATION_RUN);
|
||||
|
||||
/* switch the message object to threaded operation, if necessary */
|
||||
/* TODO:XXX: I think we must do this also if we have action queues! -- rgerhards, 2009-01-26 */
|
||||
if(MainMsgQueType == QUEUETYPE_DIRECT || iMainMsgQueueNumWorkers > 1) {
|
||||
MsgEnableThreadSafety();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user