分析完成之后的事件存到队列中,入队列函数如下:
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是包含规则匹配线程。
版权声明:本文为CSDN博主「x-ghost」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。