Beispiel #1
0
qlog_t*
qlog_new() {
  /* seems freelist no effect, so alloc directly */
  return qcalloc(sizeof(qlog_t));

  qlog_t *log;

  qmutex_lock(&free_log_list_lock);
  log = (qlog_t*)qfreelist_new(&free_log_list);
  qmutex_unlock(&free_log_list_lock);
  if (log != NULL) {
    /* del it from freelist alloc list */
    qlist_del_init(&log->fentry);
  }

  return log;
}
Beispiel #2
0
static void thread_log_box(int fd, int flags, void *data) {
  UNUSED(fd);
  UNUSED(flags);

  int           i, idx;
  qsignal_t     *signal;
  qlist_t       *list, *pos, *next;
  qlog_t        *log;
  qthread_log_t *thread_log;

  signal = (qsignal_t*)data;
  for (i = 0; ; i++) {
    if (signal == g_log_thread->signals[i]) {
      idx = i;
      break;
    }
  }
  thread_log = g_server->thread_log[idx];
  qthread_log_fetch(thread_log, &list);
  /*
   * -1 means destroy the log thread
   */
  if (flags != -1) {
    qsignal_recv(signal);
    qsignal_active(signal, 0);
  }

  for (pos = list->next; pos != list; ) {
    log = qlist_entry(pos, qlog_t, entry);
    next = pos->next;
    qlist_del_init(&(log->entry));

    log->n += sprintf(log->buff + log->n, " %s:%d ", log->file, log->line);
    vsprintf(log->buff + log->n, log->format, log->args);
    printf("%s\n", log->buff);
    if (flags == -1) {
      /* do flush I/O work */
    }

    free(log);
    pos = next;
  }
}