annotate src/http/ngx_http_busy_lock.h @ 4248:2fad4d19ea4b stable-1.0

Merging r4151, r4152, r4177: HTTP cache related fixes: *) Cache: fix for sending of empty responses. Revert wrong fix for empty responses introduced in 0.8.31 and apply new one, rewritten to match things done by static module as close as possible. *) Cache: fix for sending of stale responses. For normal cached responses ngx_http_cache_send() sends last buffer and then request finalized via ngx_http_finalize_request() call, i.e. everything is ok. But for stale responses (i.e. when upstream died, but we have something in cache) the same ngx_http_cache_send() sends last buffer, but then in ngx_http_upstream_finalize_request() another last buffer is send. This causes duplicate final chunk to appear if chunked encoding is used (and resulting problems with keepalive connections and so on). Fix this by not sending in ngx_http_upstream_finalize_request() another last buffer if we know response was from cache. *) Fixed cache bypass caching of non-cacheable replies (ticket #21). If cache was bypassed with proxy_cache_bypass, cache-controlling headers (Cache-Control, Expires) wasn't considered and response was cached even if it was actually non-cacheable. Patch by John Ferlito.
author Igor Sysoev <igor@sysoev.ru>
date Tue, 01 Nov 2011 13:49:31 +0000
parents 4c43e25d11ea
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
5
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
6
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #ifndef _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #define _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_config.h>
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_core.h>
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
13 #include <ngx_event.h>
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #include <ngx_http.h>
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 typedef struct {
272
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
18 u_char *md5_mask;
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
19 char *md5;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
20 int cacheable;
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21
272
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
22 int busy;
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
23 int max_busy;
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24
272
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
25 int waiting;
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
26 int max_waiting;
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27
272
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
28 time_t timeout;
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
272
d4e65d74db9f nginx-0.0.2-2004-03-01-00:03:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
30 ngx_event_mutex_t *mutex;
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 } ngx_http_busy_lock_t;
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
34 typedef struct {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
35 time_t time;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
36 ngx_event_t *event;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
37 void (*event_handler)(ngx_event_t *ev);
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
38 u_char *md5;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
39 int slot;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
40 } ngx_http_busy_lock_ctx_t;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
41
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
42
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
43 int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc);
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
44 int ngx_http_busy_lock_cacheable(ngx_http_busy_lock_t *bl,
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
45 ngx_http_busy_lock_ctx_t *bc, int lock);
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
46 void ngx_http_busy_unlock(ngx_http_busy_lock_t *bl,
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
47 ngx_http_busy_lock_ctx_t *bc);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
48
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 173
diff changeset
49 char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 173
diff changeset
50 void *conf);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 173
diff changeset
51
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 173
diff changeset
52
173
4fb2a2cff023 nginx-0.0.1-2003-11-04-20:09:19 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 #endif /* _NGX_HTTP_BUSY_LOCK_H_INCLUDED_ */