annotate src/event/ngx_event_connect.h @ 6755:e2f13011343e stable-1.10

HTTP/2: fixed the "http request count is zero" alert. When the stream is terminated the HEADERS frame can still wait in the output queue. This frame can't be removed and must be sent to the client anyway, since HTTP/2 uses stateful compression for headers. So in order to postpone closing and freeing memory of such stream the special close stream handler is set to the write event. After the HEADERS frame is sent the write event is called and the stream will be finally closed. Some events like receiving a RST_STREAM can trigger the read handler of such stream in closing state and cause unexpected processing that can result in another attempt to finalize the request. To prevent it the read handler is now set to ngx_http_empty_handler. Thanks to Amazon.
author Valentin Bartenev <vbart@nginx.com>
date Thu, 16 Jun 2016 20:55:11 +0300
parents 8f038068f4bc
children 1d0e03db9f8e
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: 419
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: 419
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
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3271
diff changeset
4 * Copyright (C) Nginx, Inc.
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: 419
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: 419
diff changeset
6
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
7
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #ifndef _NGX_EVENT_CONNECT_H_INCLUDED_
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #define _NGX_EVENT_CONNECT_H_INCLUDED_
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_config.h>
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
13 #include <ngx_core.h>
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #include <ngx_event.h>
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
17 #define NGX_PEER_KEEPALIVE 1
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
18 #define NGX_PEER_NEXT 2
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
19 #define NGX_PEER_FAILED 4
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
20
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
21
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
22 typedef struct ngx_peer_connection_s ngx_peer_connection_t;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
23
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
24 typedef ngx_int_t (*ngx_event_get_peer_pt)(ngx_peer_connection_t *pc,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
25 void *data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
26 typedef void (*ngx_event_free_peer_pt)(ngx_peer_connection_t *pc, void *data,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
27 ngx_uint_t state);
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
28 #if (NGX_SSL)
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
29
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
30 typedef ngx_int_t (*ngx_event_set_peer_session_pt)(ngx_peer_connection_t *pc,
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
31 void *data);
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
32 typedef void (*ngx_event_save_peer_session_pt)(ngx_peer_connection_t *pc,
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
33 void *data);
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
34 #endif
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
35
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
36
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
37 struct ngx_peer_connection_s {
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
38 ngx_connection_t *connection;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
39
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
40 struct sockaddr *sockaddr;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
41 socklen_t socklen;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
42 ngx_str_t *name;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
43
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
44 ngx_uint_t tries;
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 4412
diff changeset
45 ngx_msec_t start_time;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
46
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
47 ngx_event_get_peer_pt get;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
48 ngx_event_free_peer_pt free;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
49 void *data;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
50
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
51 #if (NGX_SSL)
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
52 ngx_event_set_peer_session_pt set_session;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
53 ngx_event_save_peer_session_pt save_session;
377
41437e4fd9b4 nginx-0.0.7-2004-07-05-19:08:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 288
diff changeset
54 #endif
120
b776ad95d96d nginx-0.0.1-2003-07-21-20:24:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
55
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3264
diff changeset
56 ngx_addr_t *local;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3264
diff changeset
57
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6031
diff changeset
58 int type;
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
59 int rcvbuf;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
60
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
61 ngx_log_t *log;
124
842a78cebbb7 nginx-0.0.1-2003-08-01-18:56:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
62
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
63 unsigned cached:1;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
64
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
65 /* ngx_connection_log_error_e */
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
66 unsigned log_error:2;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
67 };
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
70 ngx_int_t ngx_event_connect_peer(ngx_peer_connection_t *pc);
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
71 ngx_int_t ngx_event_get_peer(ngx_peer_connection_t *pc, void *data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
72
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
73
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 #endif /* _NGX_EVENT_CONNECT_H_INCLUDED_ */