Bug in ngx_slab.c?

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;

Thanks
Marcus

Posted at Nginx Forum:

Hello!

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

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 D.

Thanks for pointing out!
Didn’t know that.
Marcus

Posted at Nginx Forum: