mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-17 08:38:42 +00:00
Workaround thread-unsafeness of cli_echo().
This commit is contained in:
parent
9ae0f4b78c
commit
4e398e34bf
@ -39,14 +39,21 @@ static const int rate_limit_count = 5;
|
||||
#ifdef USE_PTHREADS
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
static pthread_mutex_t log_mutex;
|
||||
static inline void log_lock(void) { pthread_mutex_lock(&log_mutex); }
|
||||
static inline void log_unlock(void) { pthread_mutex_unlock(&log_mutex); }
|
||||
|
||||
static pthread_t main_thread;
|
||||
void main_thread_init(void) { main_thread = pthread_self(); }
|
||||
static int main_thread_self(void) { return pthread_equal(pthread_self(), main_thread); }
|
||||
|
||||
#else
|
||||
|
||||
static inline void log_lock(void) { }
|
||||
static inline void log_unlock(void) { }
|
||||
void main_thread_init(void) { }
|
||||
static int main_thread_self(void) { return 1; }
|
||||
|
||||
#endif
|
||||
|
||||
@ -128,8 +135,9 @@ log_commit(int class, buffer *buf)
|
||||
}
|
||||
log_unlock();
|
||||
|
||||
/* FIXME: cli_echo is not thread-safe */
|
||||
cli_echo(class, buf->start);
|
||||
/* cli_echo is not thread-safe, so call it just from the main thread */
|
||||
if (main_thread_self())
|
||||
cli_echo(class, buf->start);
|
||||
|
||||
buf->pos = buf->start;
|
||||
}
|
||||
|
@ -797,6 +797,8 @@ main(int argc, char **argv)
|
||||
dup2(0, 2);
|
||||
}
|
||||
|
||||
main_thread_init();
|
||||
|
||||
write_pid_file();
|
||||
|
||||
signal_init();
|
||||
|
@ -67,6 +67,7 @@ void krt_io_init(void);
|
||||
|
||||
/* log.c */
|
||||
|
||||
void main_thread_init(void);
|
||||
void log_init_debug(char *); /* Initialize debug dump to given file (NULL=stderr, ""=off) */
|
||||
void log_switch(int debug, list *l, char *); /* Use l=NULL for initial switch */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user