Mercurial > hg > nginx
annotate src/event/ngx_event_posted.h @ 7746:88eca63261c3
gRPC: RST_STREAM(NO_ERROR) handling after "trailer only" responses.
Similarly to the problem fixed in 2096b21fcd10 (ticket #1792),
when a "trailer only" gRPC response (that is, a response with the
END_STREAM flag in the HEADERS frame) was immediately followed by
RST_STREAM(NO_ERROR) in the data preread along with the response
header, RST_STREAM wasn't properly skipped and caused "upstream
rejected request with error 0" errors.
Observed with "unknown service" gRPC errors returned by grpc-go.
Fix is to set ctx->done if we are going to parse additional data,
so the RST_STREAM(NO_ERROR) is properly skipped. Additionally, now
ngx_http_grpc_filter() will complain about frames sent for closed
stream if there are any.
author | Pavel Pautov <p.pautov@f5.com> |
---|---|
date | Wed, 18 Nov 2020 18:41:16 -0800 |
parents | f1720934c45b |
children |
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:
377
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:
377
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 | 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:
377
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:
377
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:
377
diff
changeset
|
7 |
306
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #ifndef _NGX_EVENT_POSTED_H_INCLUDED_ |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
9 #define _NGX_EVENT_POSTED_H_INCLUDED_ |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
10 |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 #include <ngx_config.h> |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
13 #include <ngx_core.h> |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
14 #include <ngx_event.h> |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
15 |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
16 |
5821
3f5f0ab59b35
Events: processing of posted events changed from LIFO to FIFO.
Valentin Bartenev <vbart@nginx.com>
parents:
5820
diff
changeset
|
17 #define ngx_post_event(ev, q) \ |
563 | 18 \ |
6060
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
19 if (!(ev)->posted) { \ |
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
20 (ev)->posted = 1; \ |
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
21 ngx_queue_insert_tail(q, &(ev)->queue); \ |
563 | 22 \ |
6060
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
23 ngx_log_debug1(NGX_LOG_DEBUG_CORE, (ev)->log, 0, "post event %p", ev);\ |
563 | 24 \ |
25 } else { \ | |
6060
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
26 ngx_log_debug1(NGX_LOG_DEBUG_CORE, (ev)->log, 0, \ |
563 | 27 "update posted event %p", ev); \ |
28 } | |
29 | |
30 | |
375
744ccb59062d
nginx-0.0.7-2004-07-02-19:54:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
374
diff
changeset
|
31 #define ngx_delete_posted_event(ev) \ |
563 | 32 \ |
6060
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
33 (ev)->posted = 0; \ |
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
34 ngx_queue_remove(&(ev)->queue); \ |
563 | 35 \ |
6060
3d4730eada9c
Events: made posted events macros safe.
Valentin Bartenev <vbart@nginx.com>
parents:
5821
diff
changeset
|
36 ngx_log_debug1(NGX_LOG_DEBUG_CORE, (ev)->log, 0, \ |
563 | 37 "delete posted event %p", ev); |
375
744ccb59062d
nginx-0.0.7-2004-07-02-19:54:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
374
diff
changeset
|
38 |
373
018569a8f09c
nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
372
diff
changeset
|
39 |
306
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
40 |
5821
3f5f0ab59b35
Events: processing of posted events changed from LIFO to FIFO.
Valentin Bartenev <vbart@nginx.com>
parents:
5820
diff
changeset
|
41 void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_queue_t *posted); |
7617
f1720934c45b
SSL: reworked posted next events again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7612
diff
changeset
|
42 void ngx_event_move_posted_next(ngx_cycle_t *cycle); |
563 | 43 |
44 | |
5821
3f5f0ab59b35
Events: processing of posted events changed from LIFO to FIFO.
Valentin Bartenev <vbart@nginx.com>
parents:
5820
diff
changeset
|
45 extern ngx_queue_t ngx_posted_accept_events; |
7584
9d2ad2fb4423
SSL: available bytes handling (ticket #1431).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6060
diff
changeset
|
46 extern ngx_queue_t ngx_posted_next_events; |
5821
3f5f0ab59b35
Events: processing of posted events changed from LIFO to FIFO.
Valentin Bartenev <vbart@nginx.com>
parents:
5820
diff
changeset
|
47 extern ngx_queue_t ngx_posted_events; |
306
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
48 |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
49 |
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
50 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */ |