return NJS_ERROR;
}
- ngx_rwlock_rlock(&dict->sh->rwlock);
+ now = 0;
if (dict->timeout) {
tp = ngx_timeofday();
now = tp->sec * 1000 + tp->msec;
- ngx_js_dict_expire(dict, now);
}
+ ngx_rwlock_rlock(&dict->sh->rwlock);
+
rbtree = &dict->sh->rbtree;
if (rbtree->root == rbtree->sentinel) {
rn != NULL;
rn = ngx_rbtree_next(rbtree, rn))
{
+ node = (ngx_js_dict_node_t *) rn;
+
+ if (dict->timeout && now >= node->expire.key) {
+ continue;
+ }
+
if (max_count-- == 0) {
break;
}
- node = (ngx_js_dict_node_t *) rn;
-
value = njs_vm_array_push(vm, retval);
if (value == NULL) {
goto fail;
return NJS_ERROR;
}
- ngx_rwlock_rlock(&dict->sh->rwlock);
+ now = 0;
if (dict->timeout) {
tp = ngx_timeofday();
now = tp->sec * 1000 + tp->msec;
- ngx_js_dict_expire(dict, now);
}
+ ngx_rwlock_rlock(&dict->sh->rwlock);
+
rbtree = &dict->sh->rbtree;
if (rbtree->root == rbtree->sentinel) {
rn != NULL;
rn = ngx_rbtree_next(rbtree, rn))
{
+ node = (ngx_js_dict_node_t *) rn;
+
+ if (dict->timeout && now >= node->expire.key) {
+ continue;
+ }
+
if (max_count-- == 0) {
break;
}
- node = (ngx_js_dict_node_t *) rn;
-
kv = njs_vm_array_push(vm, retval);
if (kv == NULL) {
goto fail;
njs_js_ext_shared_dict_size(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
njs_index_t unused, njs_value_t *retval)
{
- njs_int_t items;
- ngx_msec_t now;
- ngx_time_t *tp;
- ngx_rbtree_t *rbtree;
- ngx_js_dict_t *dict;
- ngx_shm_zone_t *shm_zone;
- ngx_rbtree_node_t *rn;
+ njs_int_t items;
+ ngx_msec_t now;
+ ngx_time_t *tp;
+ ngx_rbtree_t *rbtree;
+ ngx_js_dict_t *dict;
+ ngx_shm_zone_t *shm_zone;
+ ngx_rbtree_node_t *rn;
+ ngx_js_dict_node_t *node;
shm_zone = njs_vm_external(vm, ngx_js_shared_dict_proto_id,
njs_argument(args, 0));
dict = shm_zone->data;
- ngx_rwlock_rlock(&dict->sh->rwlock);
+ now = 0;
if (dict->timeout) {
tp = ngx_timeofday();
now = tp->sec * 1000 + tp->msec;
- ngx_js_dict_expire(dict, now);
}
+ ngx_rwlock_rlock(&dict->sh->rwlock);
+
rbtree = &dict->sh->rbtree;
if (rbtree->root == rbtree->sentinel) {
rn != NULL;
rn = ngx_rbtree_next(rbtree, rn))
{
+ node = (ngx_js_dict_node_t *) rn;
+
+ if (dict->timeout && now >= node->expire.key) {
+ continue;
+ }
+
items++;
}
rbtree = &dict->sh->rbtree;
- ngx_rwlock_rlock(&dict->sh->rwlock);
+ now = 0;
if (dict->timeout) {
tp = ngx_timeofday();
now = tp->sec * 1000 + tp->msec;
- ngx_js_dict_expire(dict, now);
}
+ ngx_rwlock_rlock(&dict->sh->rwlock);
+
if (rbtree->root == rbtree->sentinel) {
ngx_rwlock_unlock(&dict->sh->rwlock);
return JS_NewArray(cx);
rn != NULL;
rn = ngx_rbtree_next(rbtree, rn))
{
+ node = (ngx_js_dict_node_t *) rn;
+
+ if (dict->timeout && now >= node->expire.key) {
+ continue;
+ }
+
if (max_count-- == 0) {
break;
}
- node = (ngx_js_dict_node_t *) rn;
-
kv = JS_NewArray(cx);
if (JS_IsException(kv)) {
ngx_rwlock_unlock(&dict->sh->rwlock);
rbtree = &dict->sh->rbtree;
- ngx_rwlock_rlock(&dict->sh->rwlock);
+ now = 0;
if (dict->timeout) {
tp = ngx_timeofday();
now = tp->sec * 1000 + tp->msec;
- ngx_js_dict_expire(dict, now);
}
+ ngx_rwlock_rlock(&dict->sh->rwlock);
+
if (rbtree->root == rbtree->sentinel) {
ngx_rwlock_unlock(&dict->sh->rwlock);
return JS_NewArray(cx);
rn != NULL;
rn = ngx_rbtree_next(rbtree, rn))
{
+ node = (ngx_js_dict_node_t *) rn;
+
+ if (dict->timeout && now >= node->expire.key) {
+ continue;
+ }
+
if (max_count-- == 0) {
break;
}
- node = (ngx_js_dict_node_t *) rn;
-
key = JS_NewStringLen(cx, (const char *) node->sn.str.data,
node->sn.str.len);
if (JS_IsException(key)) {
ngx_qjs_ext_shared_dict_size(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
- njs_int_t items;
- ngx_msec_t now;
- ngx_time_t *tp;
- ngx_rbtree_t *rbtree;
- ngx_js_dict_t *dict;
- ngx_shm_zone_t *shm_zone;
- ngx_rbtree_node_t *rn;
+ njs_int_t items;
+ ngx_msec_t now;
+ ngx_time_t *tp;
+ ngx_rbtree_t *rbtree;
+ ngx_js_dict_t *dict;
+ ngx_shm_zone_t *shm_zone;
+ ngx_rbtree_node_t *rn;
+ ngx_js_dict_node_t *node;
shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
if (shm_zone == NULL) {
dict = shm_zone->data;
- ngx_rwlock_rlock(&dict->sh->rwlock);
+ now = 0;
if (dict->timeout) {
tp = ngx_timeofday();
now = tp->sec * 1000 + tp->msec;
- ngx_js_dict_expire(dict, now);
}
+ ngx_rwlock_rlock(&dict->sh->rwlock);
+
rbtree = &dict->sh->rbtree;
if (rbtree->root == rbtree->sentinel) {
rn != NULL;
rn = ngx_rbtree_next(rbtree, rn))
{
+ node = (ngx_js_dict_node_t *) rn;
+
+ if (dict->timeout && now >= node->expire.key) {
+ continue;
+ }
+
items++;
}