comparison src/event/ngx_event_openssl.c @ 3437:90d746a95258 stable-0.7

merge r3283, r3284: fix segfault if $limit_rate was logged fix segfault in SSL if limit_rate is used
author Igor Sysoev <igor@sysoev.ru>
date Mon, 01 Feb 2010 15:20:43 +0000
parents 966f9cf9c7da
children d513f9d30208
comparison
equal deleted inserted replaced
3436:fc81ff0c2adc 3437:90d746a95258
984 send = 0; 984 send = 0;
985 flush = (in == NULL) ? 1 : 0; 985 flush = (in == NULL) ? 1 : 0;
986 986
987 for ( ;; ) { 987 for ( ;; ) {
988 988
989 while (in && buf->last < buf->end) { 989 while (in && buf->last < buf->end && send < limit) {
990 if (in->buf->last_buf || in->buf->flush) { 990 if (in->buf->last_buf || in->buf->flush) {
991 flush = 1; 991 flush = 1;
992 } 992 }
993 993
994 if (ngx_buf_special(in->buf)) { 994 if (ngx_buf_special(in->buf)) {
1011 "SSL buf copy: %d", size); 1011 "SSL buf copy: %d", size);
1012 1012
1013 ngx_memcpy(buf->last, in->buf->pos, size); 1013 ngx_memcpy(buf->last, in->buf->pos, size);
1014 1014
1015 buf->last += size; 1015 buf->last += size;
1016
1017 in->buf->pos += size; 1016 in->buf->pos += size;
1017 send += size;
1018 1018
1019 if (in->buf->pos == in->buf->last) { 1019 if (in->buf->pos == in->buf->last) {
1020 in = in->next; 1020 in = in->next;
1021 } 1021 }
1022 } 1022 }
1037 c->buffered |= NGX_SSL_BUFFERED; 1037 c->buffered |= NGX_SSL_BUFFERED;
1038 return in; 1038 return in;
1039 } 1039 }
1040 1040
1041 buf->pos += n; 1041 buf->pos += n;
1042 send += n;
1043 c->sent += n; 1042 c->sent += n;
1044 1043
1045 if (n < size) { 1044 if (n < size) {
1046 break; 1045 break;
1047 } 1046 }