view src/http/ngx_http_spdy_module.h @ 5970:74edc0ccf27a

Core: fixed a race resulting in extra sem_post()'s. The mtx->wait counter was not decremented if we were able to obtain the lock right after incrementing it. This resulted in unneeded sem_post() calls, eventually leading to EOVERFLOW errors being logged, "sem_post() failed while wake shmtx (75: Value too large for defined data type)". To close the race, mtx->wait is now decremented if we obtain the lock right after incrementing it in ngx_shmtx_lock(). The result can become -1 if a concurrent ngx_shmtx_unlock() decrements mtx->wait before the added code does. However, that only leads to one extra iteration in the next call of ngx_shmtx_lock().
author Roman Arutyunyan <arut@nginx.com>
date Wed, 04 Feb 2015 16:22:43 +0300
parents e5fb14e85040
children
line wrap: on
line source


/*
 * Copyright (C) Nginx, Inc.
 * Copyright (C) Valentin V. Bartenev
 */


#ifndef _NGX_HTTP_SPDY_MODULE_H_INCLUDED_
#define _NGX_HTTP_SPDY_MODULE_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>


typedef struct {
    size_t                          recv_buffer_size;
    u_char                         *recv_buffer;
} ngx_http_spdy_main_conf_t;


typedef struct {
    size_t                          pool_size;
    ngx_uint_t                      concurrent_streams;
    ngx_uint_t                      streams_index_mask;
    ngx_msec_t                      recv_timeout;
    ngx_msec_t                      keepalive_timeout;
    ngx_int_t                       headers_comp;
} ngx_http_spdy_srv_conf_t;


typedef struct {
    size_t                          chunk_size;
} ngx_http_spdy_loc_conf_t;


extern ngx_module_t  ngx_http_spdy_module;


#endif /* _NGX_HTTP_SPDY_MODULE_H_INCLUDED_ */