Commit 4e398e34 authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

Workaround thread-unsafeness of cli_echo().

parent 9ae0f4b7
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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,7 +135,8 @@ log_commit(int class, buffer *buf)
    }
  log_unlock();

  /* FIXME: cli_echo is not thread-safe */
  /* 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;
+2 −0
Original line number Diff line number Diff line
@@ -797,6 +797,8 @@ main(int argc, char **argv)
      dup2(0, 2);
    }

  main_thread_init();

  write_pid_file();

  signal_init();
+1 −0
Original line number Diff line number Diff line
@@ -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 */