#ifndef _MESA_SHM_RING_QUEUE_H_ #define _MESA_SHM_RING_QUEUE_H_ #include #define MESA_SHM_LOG_PATH_LEN 1024 #define MESA_SHM_RING_QUEUE_NUM 128 #define MESA_SHM_RING_QUEUE_BLOCK_NUM 8192 #define MESA_SHM_RING_QUEUE_BLOCK_SIZE 4096 #define MESA_SHM_KEY_OVERVIEW 35720 #define MESA_SHM_KEY_MIN (MESA_SHM_KEY_OVERVIEW + 1) #define MESA_SHM_KEY_MAX (MESA_SHM_KEY_MIN + MESA_SHM_RING_QUEUE_NUM -1) #define MESA_SHM_LOG_BUF_PREFIX_LEN 1024 #define MESA_CONSUMER_RUNNING 1 #define MESA_CONSUMER_NOT_RUNNING 0 struct MESA_shm_overview{ int shmkey; int shmid; int idx; int producer_pid; pthread_mutex_t mutex; }; struct MESA_shm_queue_head{ unsigned int blksize; unsigned int blknum; volatile unsigned int rd_idx; volatile unsigned int wr_idx; int ovw_idx; }; int MESA_shm_alloc_overview(struct MESA_shm_overview **ovw, int *ovw_id, int **consumer_status); struct MESA_shm_queue_head *MESA_shm_get_ring_queue(); void MESA_shm_init(); void MESA_shm_recycle_ring_queue(struct MESA_shm_queue_head *ring_queue_head); int MESA_shm_copy_buf_to_ring_queue(char *buf, int buflen, struct MESA_shm_queue_head *head, char *log_file, int log_file_len, int level); int MESA_shm_ring_queue_is_empty(struct MESA_shm_queue_head *head); int MESA_shm_ring_queue_is_full(struct MESA_shm_queue_head *head); void MESA_shm_ring_queue_set_empty(struct MESA_shm_queue_head *head); int MESA_shm_get_consumer_status(); void MESA_shm_unlink(struct MESA_shm_overview *ovw, int ovw_shmid); const char *loglevel_to_name(int level); #endif