wazuh事件环形队列(堆、栈与队列)

110 阅读1分钟

分析完成之后的事件存到队列中,入队列函数如下:

int queue_push_ex_block(w_queue_t * queue, void * data) {
    int result;
 
    w_mutex_lock(&queue->mutex);
 
    while (result = queue_full(queue), result) {
        w_cond_wait(&queue->available_not_empty, &queue->mutex);
    }
 
    result = queue_push(queue,data);
 
    w_cond_signal(&queue->available_not_empty);
    w_cond_signal(&queue->available);
    w_mutex_unlock(&queue->mutex);
 
    return result;
}

已分析完成的事件队列中,获取事件函数:

void * queue_pop_ex(w_queue_t * queue) {
   void * data;
 
    w_mutex_lock(&queue->mutex);
 
    while (data = queue_pop(queue), !data) {
        w_cond_wait(&queue->available, &queue->mutex);
    }
 
    w_cond_signal(&queue->available_not_empty);
    w_mutex_unlock(&queue->mutex);
 
    return data;
}

queue_push_ex_block调用关系,忽略test开头的函数调用,其他是analysisd.c、rules.c这个两文件在调用它进行入队列,显然analysisd.c包含了大多数事件分析线程,rules.c是包含规则匹配线程。

image.png

版权声明:本文为CSDN博主「x-ghost」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:blog.csdn.net/MEIYOUDAO_J…