Mercurial > hg > nginx-vendor-0-8
comparison src/http/ngx_http_upstream_round_robin.c @ 318:fc223117327f NGINX_0_6_3
nginx 0.6.3
*) Feature: the "proxy_store" and "fastcgi_store" directives.
*) Bugfix: a segmentation fault might occur in worker process if the
"auth_http_header" directive was used.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault occurred in worker process if the
CRAM-MD5 authentication method was used, but it was not enabled.
*) Bugfix: a segmentation fault might occur in worker process when the
HTTPS protocol was used in the "proxy_pass" directive.
*) Bugfix: a segmentation fault might occur in worker process if the
eventport method was used.
*) Bugfix: the "proxy_ignore_client_abort" and
"fastcgi_ignore_client_abort" directives did not work; bug appeared
in 0.5.13.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Thu, 12 Jul 2007 00:00:00 +0400 |
parents | 9b7db0df50f0 |
children | f7cd062ee035 |
comparison
equal
deleted
inserted
replaced
317:fcdf0e42c859 | 318:fc223117327f |
---|---|
150 | 150 |
151 r->upstream->peer.get = ngx_http_upstream_get_round_robin_peer; | 151 r->upstream->peer.get = ngx_http_upstream_get_round_robin_peer; |
152 r->upstream->peer.free = ngx_http_upstream_free_round_robin_peer; | 152 r->upstream->peer.free = ngx_http_upstream_free_round_robin_peer; |
153 r->upstream->peer.tries = rrp->peers->number; | 153 r->upstream->peer.tries = rrp->peers->number; |
154 #if (NGX_HTTP_SSL) | 154 #if (NGX_HTTP_SSL) |
155 r->upstream->peer.save_session = ngx_http_upstream_save_round_robin_peer; | 155 r->upstream->peer.set_session = |
156 ngx_http_upstream_set_round_robin_peer_session; | |
157 r->upstream->peer.save_session = | |
158 ngx_http_upstream_save_round_robin_peer_session; | |
156 #endif | 159 #endif |
157 | 160 |
158 return NGX_OK; | 161 return NGX_OK; |
159 } | 162 } |
160 | 163 |
326 } | 329 } |
327 | 330 |
328 pc->sockaddr = peer->sockaddr; | 331 pc->sockaddr = peer->sockaddr; |
329 pc->socklen = peer->socklen; | 332 pc->socklen = peer->socklen; |
330 pc->name = &peer->name; | 333 pc->name = &peer->name; |
331 #if (NGX_SSL) | |
332 pc->ssl_session = peer->ssl_session; | |
333 #endif | |
334 | 334 |
335 /* ngx_unlock_mutex(rrp->peers->mutex); */ | 335 /* ngx_unlock_mutex(rrp->peers->mutex); */ |
336 | 336 |
337 return NGX_OK; | 337 return NGX_OK; |
338 | 338 |
406 } | 406 } |
407 | 407 |
408 | 408 |
409 #if (NGX_HTTP_SSL) | 409 #if (NGX_HTTP_SSL) |
410 | 410 |
411 void | 411 ngx_int_t |
412 ngx_http_upstream_save_round_robin_peer(ngx_peer_connection_t *pc, void *data) | 412 ngx_http_upstream_set_round_robin_peer_session(ngx_peer_connection_t *pc, |
413 void *data) | |
413 { | 414 { |
414 ngx_http_upstream_rr_peer_data_t *rrp = data; | 415 ngx_http_upstream_rr_peer_data_t *rrp = data; |
415 | 416 |
417 ngx_int_t rc; | |
416 ngx_ssl_session_t *ssl_session; | 418 ngx_ssl_session_t *ssl_session; |
417 ngx_http_upstream_rr_peer_t *peer; | 419 ngx_http_upstream_rr_peer_t *peer; |
418 | 420 |
421 peer = &rrp->peers->peer[rrp->current]; | |
422 | |
423 /* TODO: threads only mutex */ | |
424 /* ngx_lock_mutex(rrp->peers->mutex); */ | |
425 | |
426 ssl_session = peer->ssl_session; | |
427 | |
428 rc = ngx_ssl_set_session(pc->connection, ssl_session); | |
429 | |
430 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0, | |
431 "set session: %p:%d", | |
432 ssl_session, ssl_session ? ssl_session->references : 0); | |
433 | |
434 /* ngx_unlock_mutex(rrp->peers->mutex); */ | |
435 | |
436 return rc; | |
437 } | |
438 | |
439 | |
440 void | |
441 ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc, | |
442 void *data) | |
443 { | |
444 ngx_http_upstream_rr_peer_data_t *rrp = data; | |
445 | |
446 ngx_ssl_session_t *old_ssl_session, *ssl_session; | |
447 ngx_http_upstream_rr_peer_t *peer; | |
448 | |
419 ssl_session = ngx_ssl_get_session(pc->connection); | 449 ssl_session = ngx_ssl_get_session(pc->connection); |
420 | 450 |
421 if (ssl_session == NULL) { | 451 if (ssl_session == NULL) { |
422 return; | 452 return; |
423 } | 453 } |
424 | 454 |
455 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0, | |
456 "save session: %p:%d", ssl_session, ssl_session->references); | |
457 | |
425 peer = &rrp->peers->peer[rrp->current]; | 458 peer = &rrp->peers->peer[rrp->current]; |
426 | 459 |
460 /* TODO: threads only mutex */ | |
427 /* ngx_lock_mutex(rrp->peers->mutex); */ | 461 /* ngx_lock_mutex(rrp->peers->mutex); */ |
462 | |
463 old_ssl_session = peer->ssl_session; | |
428 peer->ssl_session = ssl_session; | 464 peer->ssl_session = ssl_session; |
465 | |
429 /* ngx_unlock_mutex(rrp->peers->mutex); */ | 466 /* ngx_unlock_mutex(rrp->peers->mutex); */ |
430 | 467 |
431 if (pc->ssl_session) { | 468 if (old_ssl_session) { |
469 | |
470 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0, | |
471 "old session: %p:%d", | |
472 old_ssl_session, old_ssl_session->references); | |
473 | |
432 /* TODO: may block */ | 474 /* TODO: may block */ |
433 ngx_ssl_free_session(pc->ssl_session); | 475 |
476 ngx_ssl_free_session(old_ssl_session); | |
434 } | 477 } |
435 } | 478 } |
436 | 479 |
437 #endif | 480 #endif |