View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002899 | libmicrohttpd | performance | public | 2013-06-20 18:45 | 2013-07-19 13:36 |
Reporter | matt.holiday | Assigned To | Christian Grothoff | ||
Priority | normal | Severity | minor | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Product Version | 0.9.26 | ||||
Target Version | 0.9.28 | Fixed in Version | 0.9.28 | ||
Summary | 0002899: Patch to control memory pool growth with a new option | ||||
Description | This patch adds an option MHD_OPTION_CONNECTION_MEMORY_INCREMENT to provide a non-default memory increment value This allows the server incorporating microHTTPD to control the memory growth of the pool, by providing a larger increment so memory expands more quickly for large data transfers MHD_BUF_INC_SIZE remains the default if this option is not set | ||||
Additional Information | See patch file | ||||
Tags | No tags attached. | ||||
Attached Files | dynamic_buffer_increase-0.9.26.patch (4,350 bytes)
diff --recursive --unified --new-file a/src/daemon/connection.c b/src/daemon/connection.c --- a/src/daemon/connection.c 2013-02-01 17:42:25.000000000 -0700 +++ b/src/daemon/connection.c 2013-06-20 00:58:39.070870565 -0600 @@ -653,13 +653,13 @@ connection->read_buffer, connection->read_buffer_size, connection->read_buffer_size * 2 + - MHD_BUF_INC_SIZE + 1); + connection->daemon->pool_increment + 1); if (NULL == buf) return MHD_NO; /* we can actually grow the buffer, do it! */ connection->read_buffer = buf; connection->read_buffer_size = - connection->read_buffer_size * 2 + MHD_BUF_INC_SIZE; + connection->read_buffer_size * 2 + connection->daemon->pool_increment; return MHD_YES; } @@ -1084,7 +1084,7 @@ connection->read_buffer, connection->read_buffer_size, connection->read_buffer_size * 2 + - MHD_BUF_INC_SIZE); + connection->daemon->pool_increment); if (NULL == rbuf) { transmit_error_response (connection, @@ -1096,7 +1096,7 @@ else { connection->read_buffer_size = - connection->read_buffer_size * 2 + MHD_BUF_INC_SIZE; + connection->read_buffer_size * 2 + connection->daemon->pool_increment; connection->read_buffer = rbuf; } } @@ -1895,7 +1895,7 @@ return MHD_YES; /* make sure "read" has a reasonable number of bytes in buffer to use per system call (if possible) */ - if (connection->read_buffer_offset + MHD_BUF_INC_SIZE > + if (connection->read_buffer_offset + connection->daemon->pool_increment > connection->read_buffer_size) try_grow_read_buffer (connection); if (MHD_NO == do_read (connection)) diff --recursive --unified --new-file a/src/daemon/daemon.c b/src/daemon/daemon.c --- a/src/daemon/daemon.c 2013-02-28 17:11:48.000000000 -0700 +++ b/src/daemon/daemon.c 2013-06-20 01:00:05.775033429 -0600 @@ -1796,6 +1796,9 @@ case MHD_OPTION_CONNECTION_MEMORY_LIMIT: daemon->pool_size = va_arg (ap, size_t); break; + case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: + daemon->pool_increment= va_arg (ap, size_t); + break; case MHD_OPTION_CONNECTION_LIMIT: daemon->max_connections = va_arg (ap, unsigned int); break; @@ -1919,6 +1922,7 @@ { /* all options taking 'size_t' */ case MHD_OPTION_CONNECTION_MEMORY_LIMIT: + case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: case MHD_OPTION_THREAD_STACK_SIZE: if (MHD_YES != parse_options (daemon, servaddr, @@ -2151,6 +2155,7 @@ daemon->default_handler_cls = dh_cls; daemon->max_connections = MHD_MAX_CONNECTIONS_DEFAULT; daemon->pool_size = MHD_POOL_SIZE_DEFAULT; + daemon->pool_increment = MHD_BUF_INC_SIZE; daemon->unescape_callback = &MHD_http_unescape; daemon->connection_timeout = 0; /* no timeout */ daemon->wpipe[0] = -1; diff --recursive --unified --new-file a/src/daemon/internal.h b/src/daemon/internal.h --- a/src/daemon/internal.h 2012-10-23 07:43:25.000000000 -0600 +++ b/src/daemon/internal.h 2013-06-20 00:58:39.078870569 -0600 @@ -899,6 +899,11 @@ size_t pool_size; /** + * Increment for growth of the per-connection memory pools. + */ + size_t pool_increment; + + /** * Size of threads created by MHD. */ size_t thread_stack_size; diff --recursive --unified --new-file a/src/include/microhttpd.h b/src/include/microhttpd.h --- a/src/include/microhttpd.h 2013-03-30 15:23:28.000000000 -0600 +++ b/src/include/microhttpd.h 2013-06-20 00:58:39.078870569 -0600 @@ -626,7 +626,13 @@ * HTTPS daemon for client authentification. * This option should be followed by a "const char*" argument. */ - MHD_OPTION_HTTPS_MEM_TRUST =20 + MHD_OPTION_HTTPS_MEM_TRUST = 20, + + /** + * Increment to use for growing the read buffer (followed by a + * size_t). Must fit within MHD_OPTION_CONNECTION_MEMORY_LIMIT. + */ + MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21 }; | ||||
Date Modified | Username | Field | Change |
---|---|---|---|
2013-06-20 18:45 | matt.holiday | New Issue | |
2013-06-20 18:45 | matt.holiday | File Added: dynamic_buffer_increase-0.9.26.patch | |
2013-06-25 12:10 | Christian Grothoff | Assigned To | => Christian Grothoff |
2013-06-25 12:10 | Christian Grothoff | Status | new => assigned |
2013-06-25 12:10 | Christian Grothoff | Target Version | => 0.9.28 |
2013-07-05 12:12 | Christian Grothoff | Note Added: 0007203 | |
2013-07-05 12:12 | Christian Grothoff | Status | assigned => resolved |
2013-07-05 12:12 | Christian Grothoff | Fixed in Version | => 0.9.28 |
2013-07-05 12:12 | Christian Grothoff | Resolution | open => fixed |
2013-07-19 13:36 | Christian Grothoff | Status | resolved => closed |