Bug in ngx_slab.c ?

Maxim Dounin mdounin at mdounin.ru
Sun Feb 7 00:44:32 MSK 2010


Hello!

On Sat, Feb 06, 2010 at 02:20:36PM -0500, double wrote:

> Hello,
> 
> In "ngx_slab.c":
> 
> 
> static ngx_uint_t  ngx_slab_max_size;
> [...]
> void ngx_slab_init(ngx_slab_pool_t *pool)
> {
>     if (ngx_slab_max_size == 0) {
> 
> 
> Could one be sure, that "ngx_slab_max_size" is always "0"?
> Maybe better:
> 
> 
> static ngx_uint_t  ngx_slab_max_size = 0;

Here is the explication from ISO C standard (6.7.8 Initialization):

% 10. If an object that has automatic storage duration is not initialized
% explicitly, its value is indeterminate. If an object that has static storage
% duration is not initialized explicitly, then:
%
% — if it has pointer type, it is initialized to a null pointer;
% — if it has arithmetic type, it is initialized to (positive or unsigned) 
%   zero;
% — if it is an aggregate, every member is initialized (recursively) according
%   to these rules;
% — if it is a union, the first named member is initialized (recursively)
%   according to these rules.

Guess which storage duration ngx_slab_max_size has?  If in doubt, 
refer to "6.2.4 Storage durations of objects" chapter of the same 
standard.

Maxim Dounin



More information about the nginx mailing list