1 #ifndef __LOGGER_H_ 2 #define __LOGGER_H_ 3 4 #include <stdint.h> 5 6 #define LOG_BUFF_SIZE (256*1024) 7 #define NUM_LOG_BUFF (100) 8 9 enum { 10 IDLE_LOGT, 11 ACTIVE_LOGT 12 } log_thread_state; 13 14 typedef struct log_buff 15 { 16 int tid; 17 FILE* fid; 18 int buff_len; 19 char buff[LOG_BUFF_SIZE]; 20 TAILQ_ENTRY(log_buff) buff_link; 21 } log_buff; 22 23 typedef struct log_thread_context { 24 pthread_t thread; 25 int cpu; 26 int done; 27 int sp_fd; 28 int pair_sp_fd; 29 int free_buff_cnt; 30 int job_buff_cnt; 31 32 uint8_t state; 33 34 pthread_mutex_t mutex; 35 pthread_mutex_t free_mutex; 36 37 TAILQ_HEAD(, log_buff) working_queue; 38 TAILQ_HEAD(, log_buff) free_queue; 39 40 } log_thread_context; 41 42 log_buff* DequeueFreeBuffer (log_thread_context *ctx); 43 void EnqueueJobBuffer(log_thread_context *ctx, log_buff* working_bp); 44 void InitLogThreadContext (log_thread_context *ctx, int cpu); 45 void *ThreadLogMain(void* arg); 46 47 #endif /* __LOGGER_H_ */ 48