diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ac745a0c..48b28cf58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Fixed `xplatform.loadFileUTF8` when trying to open nonexistent file (#454) - Bugfix: fix an incorrect check in the recovery router code which might lead to the state cell-pool being released prematurely (#446) +- Allocating SLH for http server with configurable value 'httpRequestHeapMaxBlocks' in yaml (#447). ## `2.16.0` - No yaml value converted to null (#442) diff --git a/c/httpserver.c b/c/httpserver.c index d94875de0..c3cf7d9c5 100644 --- a/c/httpserver.c +++ b/c/httpserver.c @@ -1564,6 +1564,7 @@ HttpServer *makeHttpServerInner(STCBase *base, memcpy(&server->config->sessionTokenKey[0], &sessionTokenKey, sizeof (sessionTokenKey)); server->config->authTokenType = SERVICE_AUTH_TOKEN_TYPE_LEGACY; + server->config->httpRequestHeapMaxBlocks = HTTP_REQUEST_HEAP_DEFAULT_BLOCKS; return server; } @@ -1656,6 +1657,8 @@ static HttpServer *makeSecureHttpServerInner(STCBase *base, int port, int64 now = getFineGrainedTime(); server->config->sessionTokenKeySize = sizeof (now); memcpy(&server->config->sessionTokenKey[0], &now, sizeof (now)); + server->config->httpRequestHeapMaxBlocks = HTTP_REQUEST_HEAP_DEFAULT_BLOCKS; + return server; } #endif @@ -5821,7 +5824,9 @@ static int httpHandleTCP(STCBase *base, } } #endif // USE_ZOWE_TLS - ShortLivedHeap *slh = makeShortLivedHeap(READ_BUFFER_SIZE,100); + HttpServer *server = (HttpServer*) module->data; + unsigned int maxBlocks = server->config->httpRequestHeapMaxBlocks; + ShortLivedHeap *slh = makeShortLivedHeap(READ_BUFFER_SIZE, maxBlocks); #ifndef __ZOWE_OS_WINDOWS int writeBufferSize = 0x40000; setSocketWriteBufferSize(peerSocket,0x40000, &returnCode, &reasonCode); diff --git a/h/httpserver.h b/h/httpserver.h index 09f0d2de0..2cbbd6610 100644 --- a/h/httpserver.h +++ b/h/httpserver.h @@ -64,6 +64,10 @@ #define HTTP_SERVER_PRIVILEGED_SERVER_PROPERTY "zisServerName" +#define HTTP_REQUEST_HEAP_DEFAULT_BLOCKS 1024 +#define HTTP_REQUEST_HEAP_MIN_BLOCKS 100 +#define HTTP_REQUEST_HEAP_MAX_BLOCKS 4096 + typedef struct BigBuffer_tag{ ShortLivedHeap *slh; /* can be null */ char *data; @@ -220,6 +224,7 @@ typedef struct HTTPServerConfig_tag { hashtable *userTimeouts; hashtable *groupTimeouts; int defaultTimeout; + unsigned int httpRequestHeapMaxBlocks; /* The config manager is optional, but zss and other servers need a near-global way to get configuration data. */