Changeset 1657
- Timestamp:
- 07/17/08 18:30:50 (6 months ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/Makefile.am (modified) (1 diff)
- cherokee/trunk/cherokee/avl_r.c (modified) (6 diffs)
- cherokee/trunk/cherokee/connector.c (added)
- cherokee/trunk/cherokee/connector.h (added)
- cherokee/trunk/cherokee/downloader.c (modified) (3 diffs)
- cherokee/trunk/cherokee/server-protected.h (modified) (2 diffs)
- cherokee/trunk/cherokee/server.c (modified) (4 diffs)
- cherokee/trunk/cherokee/source.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r1654 r1657 1 2008-07-17 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/Makefile.am, cherokee/connector.c, 4 cherokee/connector.h, cherokee/avl_r.c, cherokee/source.c, 5 cherokee/downloader.c, cherokee/server-protected.h, 6 cherokee/server.c: Added a new cherokee_connector_t class. It 7 takes care of the number of concurrent connect() calls. It may 8 happen that all the threads try to connect() to unresponsive 9 resources, so the server would block. 10 1 11 2008-07-16 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 12 cherokee/trunk/cherokee/Makefile.am
r1654 r1657 1073 1073 source_interpreter.c \ 1074 1074 info.h \ 1075 info.c 1075 info.c \ 1076 connector.h \ 1077 connector.c 1076 1078 1077 1079 libcherokee_config_la_SOURCES = \ cherokee/trunk/cherokee/avl_r.c
r1131 r1657 27 27 28 28 typedef struct { 29 CHEROKEE_RWLOCK_T(lock); 29 CHEROKEE_RWLOCK_T(lock); 30 int dummy; 30 31 } cherokee_avl_r_priv_t; 31 32 … … 37 38 cherokee_avl_r_init (cherokee_avl_r_t *avl_r) 38 39 { 39 ret_t ret;40 CHEROKEE_NEW_STRUCT(n, avl_r_priv);40 ret_t ret; 41 CHEROKEE_NEW_STRUCT(n, avl_r_priv); 41 42 42 ret = cherokee_avl_init (&avl_r->avl);43 if (ret != ret_ok)44 return ret;43 ret = cherokee_avl_init (&avl_r->avl); 44 if (ret != ret_ok) 45 return ret; 45 46 46 avl_r->priv = n;47 CHEROKEE_RWLOCK_INIT (AVL_R_LOCK(avl_r), NULL);47 avl_r->priv = n; 48 CHEROKEE_RWLOCK_INIT (AVL_R_LOCK(avl_r), NULL); 48 49 49 return ret_ok;50 return ret_ok; 50 51 } 51 52 … … 54 55 cherokee_avl_r_mrproper (cherokee_avl_r_t *avl_r, cherokee_func_free_t free_func) 55 56 { 56 if (avl_r->priv) {57 CHEROKEE_RWLOCK_DESTROY (AVL_R_LOCK(avl_r));58 free (avl_r->priv);59 }57 if (avl_r->priv) { 58 CHEROKEE_RWLOCK_DESTROY (AVL_R_LOCK(avl_r)); 59 free (avl_r->priv); 60 } 60 61 61 return cherokee_avl_mrproper (&avl_r->avl, free_func);62 return cherokee_avl_mrproper (&avl_r->avl, free_func); 62 63 } 63 64 … … 66 67 cherokee_avl_r_add (cherokee_avl_r_t *avl_r, cherokee_buffer_t *key, void *value) 67 68 { 68 ret_t ret;69 ret_t ret; 69 70 70 CHEROKEE_RWLOCK_WRITER (AVL_R_LOCK(avl_r));71 ret = cherokee_avl_add (&avl_r->avl, key, value);72 CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r));71 CHEROKEE_RWLOCK_WRITER (AVL_R_LOCK(avl_r)); 72 ret = cherokee_avl_add (&avl_r->avl, key, value); 73 CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r)); 73 74 74 return ret;75 return ret; 75 76 } 76 77 … … 79 80 cherokee_avl_r_del (cherokee_avl_r_t *avl_r, cherokee_buffer_t *key, void **value) 80 81 { 81 ret_t ret;82 ret_t ret; 82 83 83 CHEROKEE_RWLOCK_WRITER (AVL_R_LOCK(avl_r));84 ret = cherokee_avl_del (&avl_r->avl, key, value);85 CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r));84 CHEROKEE_RWLOCK_WRITER (AVL_R_LOCK(avl_r)); 85 ret = cherokee_avl_del (&avl_r->avl, key, value); 86 CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r)); 86 87 87 return ret;88 return ret; 88 89 } 89 90 … … 92 93 cherokee_avl_r_get (cherokee_avl_r_t *avl_r, cherokee_buffer_t *key, void **value) 93 94 { 94 ret_t ret;95 ret_t ret; 95 96 96 CHEROKEE_RWLOCK_READER (AVL_R_LOCK(avl_r));97 ret = cherokee_avl_get (&avl_r->avl, key, value);98 CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r));97 CHEROKEE_RWLOCK_READER (AVL_R_LOCK(avl_r)); 98 ret = cherokee_avl_get (&avl_r->avl, key, value); 99 CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r)); 99 100 100 return ret;101 return ret; 101 102 } cherokee/trunk/cherokee/downloader.c
r1614 r1657 29 29 #include "url.h" 30 30 #include "header-protected.h" 31 #include "connector.h" 31 32 #include "util.h" 32 33 … … 186 187 connect_to (cherokee_downloader_t *downloader, cherokee_buffer_t *host, cuint_t port, int protocol) 187 188 { 188 ret_t ret; 189 cherokee_socket_t *sock = &downloader->socket; 189 ret_t ret; 190 cherokee_connector_t *connector = NULL; 191 cherokee_socket_t *sock = &downloader->socket; 190 192 191 193 TRACE(ENTRIES, "host=%s port=%d proto=%d\n", host->buf, port, protocol); 194 195 ret = cherokee_connector_get_default (&connector); 196 if (ret != ret_ok) 197 return ret; 192 198 193 199 /* Create the socket … … 213 219 /* Connect to server 214 220 */ 215 ret = cherokee_ socket_connect (sock);221 ret = cherokee_connector_connect (connector, socket); 216 222 TRACE(ENTRIES, "socket=%p ret=%d\n", sock, ret); 217 if (unlikely(ret != ret_ok)) return ret; 223 224 if (unlikely(ret != ret_ok)) 225 return ret; 218 226 219 227 /* Is this connection TLS? cherokee/trunk/cherokee/server-protected.h
r1654 r1657 56 56 #include "config_node.h" 57 57 #include "version.h" 58 #include "connector.h" 58 59 59 60 … … 114 115 115 116 cherokee_poll_type_t fdpoll_method; 117 cherokee_connector_t client_connector; 116 118 117 119 /* Connection related cherokee/trunk/cherokee/server.c
r1654 r1657 326 326 cherokee_socket_mrproper (&srv->socket); 327 327 328 cherokee_connector_mrproper (&srv->client_connector); 328 329 329 330 #ifdef HAVE_TLS … … 345 346 346 347 cherokee_nonce_table_free (srv->nonces); 347 348 348 349 /* Virtual servers 349 350 */ … … 1130 1131 if (unlikely(ret < ret_ok)) 1131 1132 return ret; 1133 1134 /* Initialize the client connector 1135 */ 1136 cherokee_connector_init (&srv->client_connector, 1137 (srv->thread_num > 2)? srv->thread_num-1 : 1); 1138 cherokee_connector_set_default (&srv->client_connector); 1132 1139 1133 1140 /* Print the server banner … … 1757 1764 #endif 1758 1765 1766 UNUSED(srv); 1759 1767 return ret_ok; 1760 1768 } cherokee/trunk/cherokee/source.c
r1131 r1657 28 28 #include "resolv_cache.h" 29 29 #include "util.h" 30 #include "connector.h" 30 31 31 32 #define ENTRIES "source,src" … … 71 72 ret_t ret; 72 73 cherokee_resolv_cache_t *resolv; 74 cherokee_connector_t *connector; 73 75 74 76 ret = cherokee_resolv_cache_get_default (&resolv); 75 if (unlikely (ret!=ret_ok)) return ret; 77 if (unlikely (ret!=ret_ok)) 78 return ret; 79 80 ret = cherokee_connector_get_default (&connector); 81 if (unlikely (ret!=ret_ok)) 82 return ret; 76 83 77 84 /* UNIX socket … … 85 92 if (ret != ret_ok) return ret; 86 93 87 return cherokee_ socket_connect (sock);94 return cherokee_connector_connect (connector, socket); 88 95 } 89 96 … … 99 106 SOCKET_ADDR_IPv4(sock)->sin_port = htons(src->port); 100 107 101 return cherokee_ socket_connect (sock);108 return cherokee_connector_connect (connector, socket); 102 109 } 103 110