Latest update - GitHub d16251969
This commit is contained in:
@@ -2327,6 +2327,7 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
ngx_connection_t *c;
|
||||
ngx_http_request_t *sr;
|
||||
ngx_http_core_srv_conf_t *cscf;
|
||||
ngx_http_posted_request_t *posted;
|
||||
ngx_http_postponed_request_t *pr, *p;
|
||||
|
||||
if (r->subrequests == 0) {
|
||||
@@ -2380,6 +2381,11 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
posted = ngx_palloc(r->pool, sizeof(ngx_http_posted_request_t));
|
||||
if (posted == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
|
||||
sr->main_conf = cscf->ctx->main_conf;
|
||||
sr->srv_conf = cscf->ctx->srv_conf;
|
||||
@@ -2438,10 +2444,6 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
}
|
||||
|
||||
if (!sr->background) {
|
||||
if (c->data == r && r->postponed == NULL) {
|
||||
c->data = sr;
|
||||
}
|
||||
|
||||
pr = ngx_palloc(r->pool, sizeof(ngx_http_postponed_request_t));
|
||||
if (pr == NULL) {
|
||||
return NGX_ERROR;
|
||||
@@ -2451,6 +2453,10 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
pr->out = NULL;
|
||||
pr->next = NULL;
|
||||
|
||||
if (c->data == r && r->postponed == NULL) {
|
||||
c->data = sr;
|
||||
}
|
||||
|
||||
if (r->postponed) {
|
||||
for (p = r->postponed; p->next; p = p->next) { /* void */ }
|
||||
p->next = pr;
|
||||
@@ -2498,7 +2504,7 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
ngx_http_update_location_config(sr);
|
||||
}
|
||||
|
||||
return ngx_http_post_request(sr, NULL);
|
||||
return ngx_http_post_request(sr, posted);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -878,7 +878,6 @@ ngx_http_upstream_set_round_robin_peer_session(ngx_peer_connection_t *pc,
|
||||
int len;
|
||||
const u_char *p;
|
||||
ngx_http_upstream_rr_peers_t *peers;
|
||||
u_char buf[NGX_SSL_MAX_SESSION_SIZE];
|
||||
#endif
|
||||
|
||||
peer = rrp->current;
|
||||
@@ -898,12 +897,12 @@ ngx_http_upstream_set_round_robin_peer_session(ngx_peer_connection_t *pc,
|
||||
|
||||
len = peer->ssl_session_len;
|
||||
|
||||
ngx_memcpy(buf, peer->ssl_session, len);
|
||||
ngx_memcpy(ngx_ssl_session_buffer, peer->ssl_session, len);
|
||||
|
||||
ngx_http_upstream_rr_peer_unlock(peers, peer);
|
||||
ngx_http_upstream_rr_peers_unlock(peers);
|
||||
|
||||
p = buf;
|
||||
p = ngx_ssl_session_buffer;
|
||||
ssl_session = d2i_SSL_SESSION(NULL, &p, len);
|
||||
|
||||
rc = ngx_ssl_set_session(pc->connection, ssl_session);
|
||||
@@ -940,7 +939,6 @@ ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc,
|
||||
int len;
|
||||
u_char *p;
|
||||
ngx_http_upstream_rr_peers_t *peers;
|
||||
u_char buf[NGX_SSL_MAX_SESSION_SIZE];
|
||||
#endif
|
||||
|
||||
#if (NGX_HTTP_UPSTREAM_ZONE)
|
||||
@@ -954,18 +952,18 @@ ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc,
|
||||
return;
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
|
||||
"save session: %p", ssl_session);
|
||||
|
||||
len = i2d_SSL_SESSION(ssl_session, NULL);
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0,
|
||||
"save session: %p:%d", ssl_session, len);
|
||||
|
||||
/* do not cache too big session */
|
||||
|
||||
if (len > NGX_SSL_MAX_SESSION_SIZE) {
|
||||
return;
|
||||
}
|
||||
|
||||
p = buf;
|
||||
p = ngx_ssl_session_buffer;
|
||||
(void) i2d_SSL_SESSION(ssl_session, &p);
|
||||
|
||||
peer = rrp->current;
|
||||
@@ -995,7 +993,7 @@ ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc,
|
||||
peer->ssl_session_len = len;
|
||||
}
|
||||
|
||||
ngx_memcpy(peer->ssl_session, buf, len);
|
||||
ngx_memcpy(peer->ssl_session, ngx_ssl_session_buffer, len);
|
||||
|
||||
ngx_http_upstream_rr_peer_unlock(peers, peer);
|
||||
ngx_http_upstream_rr_peers_unlock(peers);
|
||||
@@ -1023,8 +1021,6 @@ ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc,
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
|
||||
"old session: %p", old_ssl_session);
|
||||
|
||||
/* TODO: may block */
|
||||
|
||||
ngx_ssl_free_session(old_ssl_session);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user