ngx_rbtree_t rbtree_expire;
ngx_rbtree_node_t sentinel_expire;
+ ngx_msec_t last_write;
ngx_uint_t dirty;
ngx_uint_t writing;
} ngx_js_dict_sh_t;
u_char *name;
ngx_int_t rc;
ngx_log_t *log;
+ ngx_msec_t now;
njs_chb_t chain;
ngx_file_t file;
ngx_pool_t *pool;
njs_chb_node_t *node;
ngx_ext_rename_file_t ext;
+ now = ngx_current_msec;
+
log = dict->shm_zone->shm.log;
pool = ngx_create_pool(NGX_DEFAULT_POOL_SIZE, log);
return NGX_AGAIN;
}
+ if ((ngx_msec_int_t) (now - dict->sh->last_write) < 1000) {
+ ngx_rwlock_unlock(&dict->sh->rwlock);
+ ngx_destroy_pool(pool);
+ return NGX_AGAIN;
+ }
+
ngx_rwlock_downgrade(&dict->sh->rwlock);
NGX_CHB_CTX_INIT(&chain, pool);
dict->sh->writing = 1;
dict->sh->dirty = 0;
+ dict->sh->last_write = now;
ngx_rwlock_unlock(&dict->sh->rwlock);
dict->shpool->data = dict->sh;
+ dict->sh->last_write = ngx_current_msec;
+
ngx_rbtree_init(&dict->sh->rbtree, &dict->sh->sentinel,
ngx_str_rbtree_insert_value);