Mercurial > hg > nginx-vendor-0-8
view src/core/ngx_shmtx.h @ 214:0ad9eeb6ac7f NGINX_0_3_54
nginx 0.3.54
*) Feature: nginx now logs the subrequest information to the error log.
*) Feature: the "proxy_next_upstream", "fastcgi_next_upstream", and
"memcached_next_upstream" directives support the "off" parameter.
*) Feature: the "debug_connection" directive supports the CIDR address
form.
*) Bugfix: if a response of proxied server or FastCGI server was
converted from UTF-8 or back, then it may be transferred incomplete.
*) Bugfix: the $upstream_response_time variable had the time of the
first request to a backend only.
*) Bugfix: nginx could not be built on amd64 platform; bug appeared in
0.3.53.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 11 Jul 2006 00:00:00 +0400 |
parents | 73e8476f9142 |
children | 6ae1357b7b7c |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev */ #ifndef _NGX_SHMTX_H_INCLUDED_ #define _NGX_SHMTX_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef struct { #if (NGX_HAVE_ATOMIC_OPS) ngx_atomic_t *lock; #else ngx_fd_t fd; u_char *name; ngx_log_t *log; #endif } ngx_shmtx_t; ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name, ngx_log_t *log); #if (NGX_HAVE_ATOMIC_OPS) static ngx_inline ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx) { if (*mtx->lock == 0 && ngx_atomic_cmp_set(mtx->lock, 0, ngx_pid)) { return 1; } return 0; } #define ngx_shmtx_lock(mtx) ngx_spinlock((mtx)->lock, ngx_pid, 1024) #define ngx_shmtx_unlock(mtx) (void) ngx_atomic_cmp_set((mtx)->lock, ngx_pid, 0) #define ngx_shmtx_destory(mtx) #else static ngx_inline ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx) { ngx_err_t err; err = ngx_trylock_fd(mtx->fd); if (err == 0) { return 1; } if (err == NGX_EAGAIN) { return 0; } ngx_log_error(NGX_LOG_ALERT, mtx->log, err, ngx_trylock_fd_n " failed"); ngx_abort(); } static ngx_inline void ngx_shmtx_lock(ngx_shmtx_t *mtx) { ngx_err_t err; err = ngx_lock_fd(mtx->fd); if (err == 0) { return; } ngx_log_error(NGX_LOG_ALERT, mtx->log, err, ngx_lock_fd_n " failed"); ngx_abort(); } static ngx_inline void ngx_shmtx_unlock(ngx_shmtx_t *mtx) { ngx_err_t err; err = ngx_unlock_fd(mtx->fd); if (err == 0) { return; } ngx_log_error(NGX_LOG_ALERT, mtx->log, err, ngx_unlock_fd_n " failed"); ngx_abort(); } void ngx_shmtx_destory(ngx_shmtx_t *mtx); #endif #endif /* _NGX_SHMTX_H_INCLUDED_ */