Changeset 587
- Timestamp:
- 01/05/07 14:11:49 (2 years ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/Makefile.am (modified) (1 diff)
- cherokee/trunk/cherokee/buffer.c (modified) (9 diffs)
- cherokee/trunk/cherokee/server-protected.h (modified) (2 diffs)
- cherokee/trunk/cherokee/server.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r586 r587 1 2007-01-05 A.D.F <adefacc@tin.it> 2 3 * cherokee/buffer.c: 4 - cleanups, one instruction per line, 5 put each "return xxx;" on its own line; 6 7 - cleanups, remove unneeded braces { } when 8 there is only one instruction after an if; 9 10 - cherokee_buffer_read_from_fd(), 11 remove the usage of the temporary local buffer, 12 declared as char tmp[size+1]; this has the following 13 advantages: 14 - as "size+1" is not a constant the change restores 15 pure C language rules (i.e. no gcc / C++ extensions); 16 - data is read directly into destination buf, 17 avoiding a data copy; 18 NOTE: for best performances caller should pass an 19 empty buffer (where buf->buf address 20 is aligned on a page boundary or 21 at least on a sizeof(int)); 22 23 - cherokee_buffer_read_from_fd(), 24 add EWOULDBLOCK for those rare OS where it is different 25 from EAGAIN; 26 27 - cherokee_buffer_add_chunked(), 28 substitute slow cherokee_buffer_add_va() with 29 equivalent fast cherokee_buffer_add_*() calls; 30 NOTE: this is a win because chunks can be 31 as small as 1 - 8 KB and 32 so at Gigabits speed this improvement matters; 33 1 34 2007-01-04 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 35 cherokee/trunk/cherokee/Makefile.am
r529 r587 849 849 server.h \ 850 850 server.c \ 851 virtual_server_list.h \ 852 virtual_server_list.c \ 851 853 virtual_server.h \ 852 854 virtual_server.c \ cherokee/trunk/cherokee/buffer.c
r580 r587 809 809 */ 810 810 r = stat (filename, &info); 811 if (r != 0) return ret_error; 811 if (r != 0) 812 return ret_error; 812 813 813 814 /* Is a regular file? 814 815 */ 815 if (S_ISREG(info.st_mode) == 0) {816 if (S_ISREG(info.st_mode) == 0) 816 817 return ret_error; 817 }818 818 819 819 /* Maybe get memory 820 820 */ 821 821 ret = cherokee_buffer_ensure_size (buf, buf->len + info.st_size + 1); 822 if (unlikely(ret != ret_ok)) return ret; 822 if (unlikely(ret != ret_ok)) 823 return ret; 823 824 824 825 /* Open the file 825 826 */ 826 827 f = open (filename, CHE_O_READ); 827 if (f < 0) return ret_error; 828 if (f < 0) 829 return ret_error; 828 830 829 831 /* Read the content … … 852 854 { 853 855 int len; 854 char tmp[size+1]; 855 856 len = read (fd, tmp, size); 856 857 /* Ensure there is enough space in buffer 858 * NOTE: usually the caller should have already allocated 859 * enough space for the buffer, so this is a security measure 860 */ 861 cherokee_buffer_ensure_addlen(buf, size); 862 863 /* Read data at the end of the buffer 864 */ 865 len = read (fd, &(buf->buf[buf->len]), size); 857 866 if (len < 0) { 858 867 /* On error … … 861 870 case EINTR: return ret_eagain; 862 871 case EAGAIN: return ret_eagain; 872 #if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN) 873 case EWOULDBLOCK:return ret_eagain; 874 #endif 863 875 case EPIPE: return ret_eof; 864 876 case ECONNRESET: return ret_eof; … … 875 887 } 876 888 877 /* Add readed information 878 */ 879 cherokee_buffer_add (buf, tmp, len); 889 /* Add readed length, terminate buffer and return 890 */ 880 891 *ret_size = len; 892 buf->len += len; 893 894 buf->buf[buf->len] = '\0'; 881 895 882 896 return ret_ok; … … 983 997 #define hex2dec_m2(c1, c2) ( hex2dec_m(c1) * 16 + hex2dec_m(c2) ) 984 998 985 if (unlikely (buffer->buf == NULL)) {999 if (unlikely (buffer->buf == NULL)) 986 1000 return ret_error; 987 }988 1001 989 1002 /* Verify if unescaping is needed. … … 1071 1084 */ 1072 1085 ret = cherokee_buffer_new (maybe_new); 1073 if (unlikely(ret != ret_ok)) return ret; 1086 if (unlikely(ret != ret_ok)) 1087 return ret; 1074 1088 1075 1089 ret = cherokee_buffer_ensure_size (*maybe_new, buf->len + extra + 1); 1076 if (unlikely(ret != ret_ok)) return ret; 1090 if (unlikely(ret != ret_ok)) 1091 return ret; 1077 1092 1078 1093 ret = cherokee_buffer_add_buffer (*maybe_new, buf); 1079 if (unlikely(ret != ret_ok)) return ret; 1094 if (unlikely(ret != ret_ok)) 1095 return ret; 1080 1096 1081 1097 buf = *maybe_new; … … 1216 1232 */ 1217 1233 ret = cherokee_buffer_ensure_size (&new_buf, (buf->len+4)*4/3 + 1); 1218 if (unlikely (ret != ret_ok)) return ret; 1234 if (unlikely (ret != ret_ok)) 1235 return ret; 1219 1236 1220 1237 /* Encode … … 1451 1468 ret_t ret; 1452 1469 1453 ret = cherokee_buffer_add_va (buf, "0x%x"CRLF, size); 1454 if (unlikely(ret < ret_ok)) return ret_ok; 1470 ret = cherokee_buffer_add_str (buf, "0x"); 1471 if (unlikely(ret < ret_ok)) 1472 return ret_ok; 1473 1474 ret = cherokee_buffer_add_ulong16(buf, (culong_t) size); 1475 if (unlikely(ret < ret_ok)) 1476 return ret_ok; 1477 1478 ret = cherokee_buffer_add_str (buf, CRLF); 1479 if (unlikely(ret < ret_ok)) 1480 return ret_ok; 1455 1481 1456 1482 return cherokee_buffer_add (buf, txt, size); … … 1463 1489 return cherokee_buffer_add_chunked (buf, buf2->buf, buf2->len); 1464 1490 } 1491 1465 1492 1466 1493 char 1467 1494 cherokee_buffer_end_char (cherokee_buffer_t *buf) 1468 1495 { 1469 if ((buf->buf == NULL) || (buf->len <= 0)) {1496 if ((buf->buf == NULL) || (buf->len <= 0)) 1470 1497 return '\0'; 1471 }1472 1498 1473 1499 return buf->buf[buf->len-1]; cherokee/trunk/cherokee/server-protected.h
r557 r587 57 57 #include "config_node.h" 58 58 #include "version.h" 59 #include "list_wildcards.h" 59 60 60 61 … … 77 78 /* Virtual servers 78 79 */ 79 cherokee_list_t vservers; 80 cherokee_table_t vservers_ref; 80 // cherokee_list_t vservers; 81 // cherokee_table_t vservers_ref; 82 cherokee_list_wildcards_t *vservers; 83 cherokee_list_t vservers_list; 81 84 cherokee_virtual_server_t *vserver_default; 82 85 cherokee/trunk/cherokee/server.c
r557 r587 213 213 */ 214 214 INIT_LIST_HEAD (&n->vservers); 215 216 cherokee_table_init (&n->vservers_ref); 215 INIT_LIST_HEAD (&n->vservers_list); 216 217 // cherokee_table_init (&n->vservers_ref); 217 218 218 219 cherokee_virtual_server_new (&n->vserver_default, n); … … 278 279 cherokee_list_t *i, *j; 279 280 280 list_for_each_safe (i, j, &srv->vservers ) {281 list_for_each_safe (i, j, &srv->vservers_list) { 281 282 cherokee_virtual_server_free (VSERVER(i)); 282 283 } 283 284 284 cherokee_table_mrproper (&srv->vservers_ref); 285 286 cherokee_list_wildcards_clean (&srv->vservers, cherokee_virtual_server_free); 287 // cherokee_table_mrproper (&srv->vservers_ref); 285 288 } 286 289 … … 783 786 784 787 static void 785 for_each_vserver_init_tls_func (const char *key, void *value)788 vserver_init_tls (cherokee_virtual_server_t *vserver) 786 789 { 787 790 ret_t ret; 788 cherokee_virtual_server_t *vserver= VSERVER(value);791 = VSERVER(value); 789 792 790 793 ret = cherokee_virtual_server_init_tls (vserver); … … 810 813 { 811 814 #ifdef HAVE_TLS 812 ret_t ret; 815 ret_t ret; 816 list_t *i; 813 817 814 818 /* Initialize the server TLS socket … … 827 831 } 828 832 829 cherokee_table_foreach (&srv->vservers_ref, for_each_vserver_init_tls_func); 833 list_for_each (i, &srv->vservers) { 834 vserver_init_tls (LIST_WILDCARDS_ENTRY(i)->value); 835 } 836 // cherokee_table_foreach (&srv->vservers_ref, for_each_vserver_init_tls_func); 830 837 #endif 831 838 … … 920 927 921 928 if (srv->tls_enabled == false) { 922 ret = cherokee_table_while (&srv->vservers_ref, while_vserver_check_tls_func, NULL, NULL, NULL); 923 srv->tls_enabled = (ret == ret_ok); 929 list_t *i; 930 cherokee_virtual_server_t *vsrv; 931 932 list_for_each (i, &srv->vservers) { 933 vsrv = LIST_WILDCARDS_ENTRY(i)->value; 934 935 ret = cherokee_virtual_server_have_tls (vsrv); 936 if (ret == ret_ok) 937 srv->tls_enabled = true; 938 } 939 // ret = cherokee_table_while (&srv->vservers_ref, while_vserver_check_tls_func, NULL, NULL, NULL); 940 // srv->tls_enabled = (ret == ret_ok); 924 941 } 925 942 … … 1000 1017 1001 1018 1002 static void 1003 flush_vserver (const char *key, void *value) 1004 { 1005 /* There's no logger in this virtual server 1006 */1007 if ((value == NULL) || (VSERVER_LOGGER(value) == NULL)) 1008 return; 1009 1010 cherokee_logger_flush (VSERVER_LOGGER(value)); 1011 } 1019 /* static void */ 1020 /* flush_vserver (const char *key, void *value) */ 1021 /* { */ 1022 /* /\* There's no logger in this virtual server */ 1023 /* *\/ */ 1024 /* if ((value == NULL) || (VSERVER_LOGGER(value) == NULL)) */ 1025 /* return; */ 1026 1027 /* cherokee_logger_flush (VSERVER_LOGGER(value)); */ 1028 /* } */ 1012 1029 1013 1030 … … 1015 1032 flush_logs (cherokee_server_t *srv) 1016 1033 { 1034 list_t *i; 1035 cherokee_virtual_server_t *vsrv; 1036 1017 1037 flush_vserver (NULL, srv->vserver_default); 1018 cherokee_table_foreach (&srv->vservers_ref, flush_vserver); 1038 // cherokee_table_foreach (&srv->vservers_ref, flush_vserver); 1039 1040 list_for_each (i, &srv->vservers) { 1041 vsrv = LIST_WILDCARDS_ENTRY(i)->value; 1042 1043 if (VSERVER_LOGGER(vsrv)) { 1044 cherokee_logger_flush (VSERVER_LOGGER(vsrv)); 1045 } 1046 } 1019 1047 } 1020 1048 … … 1278 1306 if (ret != ret_ok) return ret; 1279 1307 1280 cherokee_list_add (LIST(vsrv), &srv->vservers );1308 cherokee_list_add (LIST(vsrv), &srv->vservers_list); 1281 1309 1282 1310 param[0] = srv;