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