logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Subranshu Patel <spatel...@gmail.com>
Subject log4c deadlock issue
Date Tue, 12 Dec 2017 09:27:30 GMT
I have observed a scenario where application goes to a deadlock state.
Suspect the reason to be log4c.



Let me explain the scenario:

1. Process P1 starts - performs log4c_init(),log4c_category_get() and
log4c_category_log_locinfo() for logging.

2. P1 creates threads - T1, T2 and T3.

3. Now process P1 forks() to create P2 and at the same time T1 is logging
using log4c_category_log_locinfo()

4. P2 invokes log4c_init(), log4c_category_get() and then invokes
log4c_category_log_locinfo(). This results in deadlock. P2 never returns
from log4c_category_log_locinfo().



My Investigation:

When T1 invokes VE_LOG and P1 invokes fork() at the same time, the
following happens

1. T1 invokes VE_LOG() and acquires mutex lock (from within log4c).

2. P1 forks at the same time and P2 is created.

3. P2 performs log4c_init() and log4c_category_log_locinfo(). Here
pthread_mutex_init() is not invoked. P2 gets the old value of the mutex.
When P2 invokes log4c_category_log_locinfo(), it waits in
pthread_mutex_lock()

4. There is no one to wake up P2 and deadlock occurs.



The issue occurs because after fork(), the lock value is not initialized
and we use pthread_mutex_lock().



I am using a rolling policy here. Let me know if log4c is safe in this kind
of scenario.

Mime
View raw message