Upstream: the "zone" directive.

Upstreams with the "zone" directive are kept in shared memory,
with a consistent view of all worker processes.
This commit is contained in:
Ruslan Ermilov 2015-04-14 19:01:25 +03:00
parent b0b7b5a356
commit cf31347ee8
10 changed files with 407 additions and 7 deletions

View file

@ -441,7 +441,8 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
}
if (shm_zone[i].tag == oshm_zone[n].tag
&& shm_zone[i].shm.size == oshm_zone[n].shm.size)
&& shm_zone[i].shm.size == oshm_zone[n].shm.size
&& !shm_zone[i].noreuse)
{
shm_zone[i].shm.addr = oshm_zone[n].shm.addr;
@ -1234,6 +1235,7 @@ ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name, size_t size, void *tag)
shm_zone->shm.exists = 0;
shm_zone->init = NULL;
shm_zone->tag = tag;
shm_zone->noreuse = 0;
return shm_zone;
}

View file

@ -31,6 +31,7 @@ struct ngx_shm_zone_s {
ngx_shm_t shm;
ngx_shm_zone_init_pt init;
void *tag;
ngx_uint_t noreuse; /* unsigned noreuse:1; */
};

View file

@ -109,4 +109,12 @@ ngx_rwlock_unlock(ngx_atomic_t *lock)
}
#else
#if (NGX_HTTP_UPSTREAM_ZONE)
#error ngx_atomic_cmp_set() is not defined!
#endif
#endif