static void free_resource(ngx_cycle_t* cycle) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "[%s %d]%Z", __FUNCTION__, __LINE__);
//return;
/*
1 get ngx_http_core_main_conf_t: ((ngx_http_conf_ctx_t *) cycle->conf_ctx[ngx_http_module.index])->main_conf[ngx_http_core_module.ctx_index]
2 get ngx_http_core_module servers_list(ngx_array_t): ngx_http_core_main_conf_t* ->servers
3 ergodic servers
4 ngx_http_core_srv_conf_t*= *(ngx_http_core_srv_conf_t**) servers->item
5 get ngx_http_core_srv_conf_t context:s_ctx=ngx_http_core_srv_conf_t->ctx
6 get user_my_module_srv_conf :v_srv_conf=s_ctx->srv_conf[ngx_http_waf_module.ctx_index]
7 get user_my_module_srv_conf-shh_zone:v_srv_conf->shm_zone
8 see user_my_module_srv_conf-shh_zone-data is equal v_srv_conf :v_srv_conf->shm_zone->data===v_srv_conf
*/
ngx_http_waf_main_conf_t* main_conf = ngx_http_cycle_get_module_main_conf(cycle, ngx_http_waf_module);
if (NULL != main_conf) {
if (NGX_CONF_UNSET !=main_conf->mmdb_status)
{
//ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "[%V][%s %d]%Z", &main_conf->waf_data_dir_path, __FUNCTION__, __LINE__);
MMDB_s mmdb = main_conf->mmdb_infos;
MMDB_close(&mmdb);
}
}
ngx_http_core_main_conf_t* cmain_conf = ngx_http_cycle_get_module_main_conf(cycle, ngx_http_core_module);
ngx_array_t servers_array = cmain_conf->servers;
void* p = (void*)servers_array.elts;
//ngx_log_error(ngx_log_alert,cycle->log, 0,"nelts==[%d]",(int)servers_array.nelts);
ngx_uint_t i = 0;
for (i = 0; i < servers_array.nelts; i++)
{
char* core_srv_conf_p = (char*)p + i * servers_array.size;
if (core_srv_conf_p) {
ngx_http_core_srv_conf_t* core_srv_conf = *(ngx_http_core_srv_conf_t**)core_srv_conf_p;
//ngx_log_error(ngx_log_alert,cycle->log, 0,"core_srv_conf==[%p],file_name=[%s],size={%xd}",core_srv_conf,core_srv_conf->file_name,(int)servers_array.size);
ngx_http_conf_ctx_t* s_ctx = core_srv_conf->ctx;
if (s_ctx) {
void* v_srv_conf = s_ctx->srv_conf[ngx_http_waf_module.ctx_index];
//ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "[FREE SERVER RESOURCES][%s %d]%Z", __FUNCTION__, __LINE__);
ngx_http_waf_srv_conf_t* srv_conf = (ngx_http_waf_srv_conf_t*)v_srv_conf;
ngx_close_file(srv_conf->log_fd);
if (NULL!= srv_conf->hyperscan_scratch && NGX_CONF_UNSET_PTR!= srv_conf->hyperscan_scratch)
{
//free hyperscan_scratch
free_static_scratch(srv_conf);
}
//ngx_log_error(ngx_log_alert,cycle->log, 0,"srv_conf->ip_req_info_array==[%p],shm_zone->[%p],",srv_conf->ip_req_info_array,srv_conf->shm_zone);
//if (srv_conf->shm_zone) {
// ngx_http_waf_srv_conf_t* save_o_srv_conf = srv_conf->shm_zone->data;
// ngx_log_error(ngx_log_alert, cycle->log, 0, "shm_zone-ip_req_info_array[%p],srv_conf->ip_req_info_array[%p]", save_o_srv_conf->ip_req_info_array, srv_conf->ip_req_info_array);
// //ngx_log_error(ngx_log_alert,cycle->log, 0,"srv_conf->ip_req_info_array==[%p],shm_zone->[%p],srv_conf->shm_zone->data->[%p]",srv_conf->ip_req_info_array,srv_conf->shm_zone,srv_conf->shm_zone->data);
//}
}
}
}
return;
}