Mercurial > hg > nginx
view src/core/ngx_shmtx.h @ 4723:68ac485abbba stable-1.2
Merge of r4654, r4672, r4684, r4685, r4692: resolver changes.
*) Resolver: fixed format specification.
Patch by Yichun Zhang (agentzh).
*) Support for IPv6 literals and an optional port in resolver.
*) Fixed crash in ngx_resolver_cleanup_tree().
If sending a DNS request fails with an error (e.g., when mistakenly
trying to send it to a local IP broadcast), such a request is not
deleted if there are clients waiting on it. However, it was still
erroneously removed from the queue. Later ngx_resolver_cleanup_tree()
attempted to remove it from the queue again that resulted in a NULL
pointer dereference.
*) When "resolver" is configured with a domain name, only the first
resolved address was used. Now all addresses will be used.
*) Fixed segfault with poll and resolver used.
Poll event method needs ngx_cycle->files to work, and use of
ngx_exit_cycle without files set caused null pointer dereference in
resolver's cleanup on udp socket close.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 02 Jul 2012 16:23:14 +0000 |
parents | d620f497c50f |
children | 512c741fa841 |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_SHMTX_H_INCLUDED_ #define _NGX_SHMTX_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef struct { ngx_atomic_t lock; #if (NGX_HAVE_POSIX_SEM) ngx_atomic_t wait; #endif } ngx_shmtx_sh_t; typedef struct { #if (NGX_HAVE_ATOMIC_OPS) ngx_atomic_t *lock; #if (NGX_HAVE_POSIX_SEM) ngx_atomic_t *wait; ngx_uint_t semaphore; sem_t sem; #endif #else ngx_fd_t fd; u_char *name; #endif ngx_uint_t spin; } ngx_shmtx_t; ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, ngx_shmtx_sh_t *addr, u_char *name); void ngx_shmtx_destory(ngx_shmtx_t *mtx); ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx); void ngx_shmtx_lock(ngx_shmtx_t *mtx); void ngx_shmtx_unlock(ngx_shmtx_t *mtx); ngx_uint_t ngx_shmtx_force_unlock(ngx_shmtx_t *mtx, ngx_pid_t pid); #endif /* _NGX_SHMTX_H_INCLUDED_ */