Mercurial > hg > nginx
annotate src/core/ngx_shmtx.h @ 4436:311b358658c8 stable-1.0
Merge of r4339, r4340, r4341:
Cache fixes:
*) Obsolete code removed.
The ngx_http_cache() and ngx_http_no_cache_set_slot() functions
were replaced in 0.8.46 and no longer used since then.
*) Handling of cache files with long headers.
There are two possible situations which can lead to this: response
was cached with bigger proxy_buffer_size value (and nginx was
restared since then, i.e. shared memory zone content was lost), or
due to the race in the cache update code (see [1]) we've end up
with fcn->body_start from a different response stored in shared
memory zone.
*) Only complain on long locked entries.
There have been multiple reports of cases where a real locked entry
was removed, resulting in a segmentation fault later in a worker
which locked the entry. It looks like default inactive timeout isn't
enough in real life.
For now just ignore such locked entries, and move them to the top of
the inactive queue to allow processing of other entries.
[1] http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001287.html
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sun, 05 Feb 2012 13:34:08 +0000 |
parents | 0daede16d68b |
children | 3f6040cd731e 4919fb357a5d |
rev | line source |
---|---|
611 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 */ | |
5 | |
6 | |
7 #ifndef _NGX_SHMTX_H_INCLUDED_ | |
8 #define _NGX_SHMTX_H_INCLUDED_ | |
9 | |
10 | |
11 #include <ngx_config.h> | |
12 #include <ngx_core.h> | |
13 | |
14 | |
15 typedef struct { | |
16 #if (NGX_HAVE_ATOMIC_OPS) | |
17 ngx_atomic_t *lock; | |
3909
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
18 #if (NGX_HAVE_POSIX_SEM) |
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
19 ngx_uint_t semaphore; |
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
20 sem_t sem; |
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
21 #endif |
611 | 22 #else |
23 ngx_fd_t fd; | |
24 u_char *name; | |
25 #endif | |
3909
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
26 ngx_uint_t spin; |
611 | 27 } ngx_shmtx_t; |
28 | |
29 | |
860
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
611
diff
changeset
|
30 ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name); |
611 | 31 void ngx_shmtx_destory(ngx_shmtx_t *mtx); |
3909
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
32 ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx); |
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
33 void ngx_shmtx_lock(ngx_shmtx_t *mtx); |
0daede16d68b
use POSIX semaphores in shmtx instead of sched_yield()
Igor Sysoev <igor@sysoev.ru>
parents:
2563
diff
changeset
|
34 void ngx_shmtx_unlock(ngx_shmtx_t *mtx); |
611 | 35 |
36 | |
37 #endif /* _NGX_SHMTX_H_INCLUDED_ */ |