static void ngx_proc_luashm_backup_thread_cycle(void *data) { ngx_proc_luashm_backup_conf_t *pbcf; ngx_cycle_t *cycle; ngx_shm_zone_t *zone; ngx_str_t *name; ngx_uint_t i; ngx_time_t *tp; int64_t now,settimestamp; cycle = data; pbcf = ngx_proc_get_conf(cycle->conf_ctx, ngx_proc_luashm_backup_module); if(pbcf->settimestamp.data == NULL){ pthread_exit((void *)0); return; } while(pbcf->running){ ngx_time_update(); if(ngx_strstr(pbcf->settimestamp.data,":")==NULL){ settimestamp=ngx_atoi(pbcf->settimestamp.data,pbcf->settimestamp.len); }else{ tp = ngx_timeofday(); now = (int64_t) tp->sec * 1000 + tp->msec; settimestamp=GetTick((char*)pbcf->settimestamp.data)*1000; ngx_log_error(NGX_LOG_DEBUG, ngx_cycle->log, 0, "========= now:%lu, settimestamp:%lu =========",now,settimestamp); if(settimestamp<now) settimestamp=(24*60*60*1000)-(now-settimestamp); else settimestamp=settimestamp-now; if(settimestamp==0)settimestamp=1; } ngx_log_error(NGX_LOG_DEBUG, ngx_cycle->log, 0, "========= backup time:%s, sleeptime:%lu =========",pbcf->settimestamp.data,settimestamp); ngx_msleep(settimestamp); if(!pbcf->running)break; i = 0; for (; i < pbcf->shdict_names->nelts;i++) { name = ((ngx_str_t*)pbcf->shdict_names->elts) + i; zone = ngx_http_lua_find_zone(name->data,name->len); dd("shm.name:%s,shm.name_len:%ld,shm.size:%ld ", name->data,name->len,zone->shm.size); ngx_proc_luashm_backup_backup(cycle,zone); } ngx_log_error(NGX_LOG_DEBUG, cycle->log, 0, "luashm_backup %V",&ngx_cached_http_time); ngx_sleep(60); if(!pbcf->running)break; } pthread_exit((void *)0); }
void sleep(ngx_uint_t sec) const { ngx_sleep(sec); }