Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize - #65737

Merged
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size
Mar 16, 2026
Merged

Migrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSize#65737
MichalStrehovsky merged 4 commits into
mainfrom
copilot/update-default-stack-size

Conversation

CopilotAI commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

DEFAULT_STACK_SIZE host configuration option is being removed in dotnet/runtime#118057. Migrates the IIS in-process request handler to the replacement System.Threading.DefaultStackSize property, which requires a decimal string instead of hex.

Description

  • HostFxr.h: Update DOTNETCORE_STACK_SIZE macro value from L"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
  • InProcessOptions.cpp: Parse the configured stack size (hex with or without 0x prefix, preserving backward compat) via wcstoul(..., 16) and store as decimal string. Default changes from L"0x100000"L"1048576" (both 1 MB). For invalid or out-of-range values, the raw configured string is passed through as-is so the runtime handles it the same way as before.
// Before
m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000");
// After — converts hex config value to decimal required by new API;// passes through raw value on parse failure to match previous runtime behaviorunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
if (endPtr != rawStr && errno == 0)
{
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf; // e.g. "0x100000" or "100000" → "1048576"
}
else
{
m_strStackSize = rawStackSize.value(); // pass through, let runtime handle it
}

No changes needed at the call site in inprocessapplication.cpp.

  • You've read the Contributor Guide and Code of Conduct.
  • You've included unit or integration tests for your change, where applicable.
  • You've included inline docs for your change, where applicable.
  • There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Original prompt

Background

The DEFAULT_STACK_SIZE host configuration option (used via the DOTNETCORE_STACK_SIZE macro) is being deleted in dotnet/runtime#118057. We need to migrate to the replacement System.Threading.DefaultStackSize host configuration option, which is documented in dotnet/docs#47575.

What needs to change

There are three files involved across the IIS in-process request handler:


1. src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.h

Current:

#defineDOTNETCORE_STACK_SIZEL"DEFAULT_STACK_SIZE"

Change to:

#defineDOTNETCORE_STACK_SIZEL"System.Threading.DefaultStackSize"

2. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp

The stack size value is currently stored as a hex string (with optional 0x prefix) — matching what DEFAULT_STACK_SIZE expected. The new System.Threading.DefaultStackSize property requires a decimal number string.

Current (line 68):

m_strStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE).value_or(L"0x100000"); // 1 MB in hex

The default 0x100000 hex = 1048576 decimal (1 MB).

Change to: Parse the configured value (which may be hex with or without 0x prefix, as before) and convert it to a decimal string. The default should become L"1048576" (decimal equivalent of 0x100000).

The logic should be:

  1. Read the raw string value from handler settings (same key CS_ASPNETCORE_HANDLER_STACK_SIZE).
  2. If the raw value starts with 0x or 0X, parse it as hexadecimal (using wcstoul with base 16) and convert to a decimal wide string.
  3. If it doesn't have a 0x prefix but is a valid hex string (the old format allowed hex without the prefix), try parsing it as hexadecimal first (base 16), then convert to decimal.
    • Actually, to keep it simple and match the old behavior: attempt to parse the value as hex (base 16) regardless, since DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Then format the result as decimal.
  4. Store the decimal string in m_strStackSize.
  5. The default (when no value is configured) should be L"1048576" (1 MB in decimal).

Here's a concrete implementation approach:

// Parse stack size: config accepts hex (with or without 0x prefix), new API requires decimalauto rawStackSize = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_STACK_SIZE);
if (rawStackSize.has_value())
{
constwchar_t* rawStr = rawStackSize.value().c_str();
wchar_t* endPtr = nullptr;
// wcstoul handles "0x..." prefix automatically with base 0 or base 16// Use base 0 to auto-detect 0x prefix; fall back to base 16 for bare hexunsignedlong stackSizeVal = wcstoul(rawStr, &endPtr, 16);
wchar_t decimalBuf[32];
swprintf_s(decimalBuf, L"%lu", stackSizeVal);
m_strStackSize = decimalBuf;
}
else
{
m_strStackSize = L"1048576"; // 1 MB in decimal
}

Note: The old DEFAULT_STACK_SIZE accepted hex with or without 0x prefix. Using base 16 in wcstoul handles both bare hex (e.g. "100000") and prefixed hex (e.g., "0x100000"). The new System.Threading.DefaultStackSize requires decimal, so we convert.


3. src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h

The QueryStackSize() return type and storage can remain std::wstring — no changes needed here. However, if there are any comments referencing hex or the old format, update them for clarity.


Summary of the change

LocationOldNew
HostFxr.h macroL"DEFAULT_STACK_SIZE"L"System.Threading.DefaultStackSize"
InProcessOptions.cpp default valueL"0x100000" (hex string)L"1048576" (decimal string)
InProcessOptions.cpp value parsingstored raw hex stringparse hex, store as decimal string

The inprocessapplication.cpp call site (context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str())) does not need to change — it will automatically pick up the new property name via the updated macro and receive the correctly formatted decimal value from QueryStackSize().

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: we currently set the DEFAULT_STACK_SIZE host configuration option to set the stack size. the DEFAULT_STACK_SIZE host configuration option is going to be deleted in @dotnet/runtime/pull/118057

We need to switch to the documented System.Threading.DefaultStackSize host configuration option (docs at @dotnet/docs/pull/47575). These settings are largely equivalent, we just need to swap the DEFAULT_STACK_SIZE string for System.Threading.DefaultStackSize string. Note however that System.Threading.DefaultStackSize accepts the setting as a decimal number. DEFAULT_STACK_SIZE accepted a hexadecimal number with or wi...

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…host config option
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
CopilotAI changed the title [WIP] Update host configuration for default stack sizeMigrate IIS in-process handler from DEFAULT_STACK_SIZE to System.Threading.DefaultStackSizeMar 11, 2026
…behavior
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
@MichalStrehovsky
MichalStrehovsky marked this pull request as ready for review March 11, 2026 01:20
CopilotAI review requested due to automatic review settings March 11, 2026 01:20
@github-actionsgithub-actionsBot added the needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically label Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the IIS in-process handler from the deprecated DEFAULT_STACK_SIZE runtime config to System.Threading.DefaultStackSize, converting configured hex stack-size values into the decimal string required by the new runtime property.

Changes:

  • Updated the runtime property name used for stack-size configuration.
  • Updated in-process options parsing to convert hex stack-size strings to decimal and adjusted the default to a decimal value.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

FileDescription
src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxr.hSwitches stack-size host property name to System.Threading.DefaultStackSize.
src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cppConverts configured stack size from hex to decimal string; updates default to decimal.

You can also share your feedback on Copilot code review. Take the survey.

@gfoidlgfoidl added feature-iis Includes: IIS, ANCM area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed needs-area-label Used by the dotnet-issue-labeler to label those issues which couldn't be triaged automatically labels Mar 11, 2026
@MichalStrehovsky
MichalStrehovsky merged commit a200b84 into mainMar 16, 2026
29 checks passed
@MichalStrehovsky
MichalStrehovsky deleted the copilot/update-default-stack-size branch March 16, 2026 03:21
@dotnet-policy-servicedotnet-policy-serviceBot added this to the 11.0-preview3 milestone Mar 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-networkingIncludes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractionsfeature-iisIncludes: IIS, ANCM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BrennanConroy@MichalStrehovsky@gfoidl