[PATCH 4 of 9] Core: inheritance of non-reusable shared memory zones

Roman Arutyunyan arut at nginx.com
Mon Jul 8 14:22:47 UTC 2024


On Thu, Jun 13, 2024 at 03:28:59PM -0700, Aleksei Bavshin wrote:
> # HG changeset patch
> # User Ruslan Ermilov <ru at nginx.com>
> # Date 1509736941 -10800
> #      Fri Nov 03 22:22:21 2017 +0300
> # Node ID 90ef6f74980d5e46c95aa32375a58bb8eb56122e
> # Parent  8b7fcded3983023229de1a6df5e2e0b857ee1bc9
> Core: inheritance of non-reusable shared memory zones.
> 
> When re-creating a non-reusable zone, make the pointer to the old zone
> available during the new zone initialization.
> 
> diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
> --- a/src/core/ngx_cycle.c
> +++ b/src/core/ngx_cycle.c
> @@ -38,7 +38,7 @@ static ngx_connection_t  dumb;
>  ngx_cycle_t *
>  ngx_init_cycle(ngx_cycle_t *old_cycle)
>  {
> -    void                *rv;
> +    void                *rv, *data;
>      char               **senv;
>      ngx_uint_t           i, n;
>      ngx_log_t           *log;
> @@ -438,6 +438,8 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
>          opart = &old_cycle->shared_memory.part;
>          oshm_zone = opart->elts;
>  
> +        data = NULL;
> +
>          for (n = 0; /* void */ ; n++) {
>  
>              if (n >= opart->nelts) {
> @@ -461,9 +463,13 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
>                  continue;
>              }
>  
> +            if (shm_zone[i].tag == oshm_zone[n].tag && shm_zone[i].noreuse) {
> +                data = oshm_zone[n].data;
> +                break;
> +            }
> +
>              if (shm_zone[i].tag == oshm_zone[n].tag
> -                && shm_zone[i].shm.size == oshm_zone[n].shm.size
> -                && !shm_zone[i].noreuse)
> +                && shm_zone[i].shm.size == oshm_zone[n].shm.size)
>              {
>                  shm_zone[i].shm.addr = oshm_zone[n].shm.addr;
>  #if (NGX_WIN32)
> @@ -490,7 +496,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
>              goto failed;
>          }
>  
> -        if (shm_zone[i].init(&shm_zone[i], NULL) != NGX_OK) {
> +        if (shm_zone[i].init(&shm_zone[i], data) != NGX_OK) {
>              goto failed;
>          }
>  
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx-devel

Looks fine


More information about the nginx-devel mailing list