Skip to content

Conversation

@janvorli
Copy link
Member

The new EH was incorrectly notifying exception search and unwind function enter / leave in case of funclets. For each funclet, it was reporting enter and leave of the parent and then it reported it again for the parent itself.

This was different from the old EH behavior where only one enter / leave was reported for each method.

This change rectifies it.

Close #123351

The new EH was incorrectly notifying exception search and unwind
function enter / leave in case of funclets. For each funclet, it was
reporting enter and leave of the parent and then it reported it again
for the parent itself.

This was different from the old EH behavior where only one enter /
leave was reported for each method.

This change rectifies it.

Close dotnet#123351
@janvorli janvorli added this to the 10.0.x milestone Jan 23, 2026
@janvorli janvorli requested a review from jkotas January 23, 2026 21:03
@janvorli janvorli self-assigned this Jan 23, 2026
Copilot AI review requested due to automatic review settings January 23, 2026 21:03
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes a bug in the new exception handling implementation where profiler notifications for exception search and unwind function enter/leave were being reported multiple times for methods with funclets (e.g., finally blocks). The fix ensures that each method is only reported once per exception handling pass, matching the behavior of the old exception handling system.

Changes:

  • Added a check to skip duplicate profiler notifications when transitioning between funclets and their parent methods

Comment on lines +3720 to +3726
if (pThis->m_crawl.IsFunclet() && (pMD == pExInfo->m_pMDToReportFunctionLeave))
{
// In case of a funclet, the pMD represents the parent of the funclet. We only want to report entering and leaving
// the method once. So we ignore transitions from the funclet to the parent method or the funclet into another funclet
// of the same parent method.
return;
}
Copy link

Copilot AI Jan 23, 2026

Choose a reason for hiding this comment

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

Consider adding a test case that validates this fix by checking that ExceptionSearchFunctionEnter/ExceptionSearchFunctionLeave and ExceptionUnwindFunctionEnter/ExceptionUnwindFunctionLeave are called exactly once per method when an exception is thrown from within a try-finally block. This would prevent regression of issue #123351.

A test could be structured similar to the scenario in the issue: a method with a try-finally block that throws from the finally, with a profiler that tracks and validates the count of Enter/Leave pairs for each FunctionID.

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

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

@copilot open a new pull request to apply changes based on this feedback

Copy link
Member Author

Choose a reason for hiding this comment

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

I am curious :-)

Copy link
Member

Choose a reason for hiding this comment

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

This request won't work well since this PR originates in a personal fork. If you want copilot to help with a PR like this, it works best if the PR is started by copilot. It is a known github copilot workflow limitation.

I am starting all my PRs as copilot PRs for this reason. Once the PR is opened you can push changes into it just like you would into a regular PR, but you can also ask copilot to help seamlessly that is really nice.

Copy link
Member Author

Choose a reason for hiding this comment

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

I am half done with a test that I've started to create myself after your initial comment. I'll push it here once done.

Copy link
Member

Choose a reason for hiding this comment

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

This request won't work well

rats - thanks for the info about it though!

I'll push it here once done.

I'll just wait for that, thanks!

@jkotas
Copy link
Member

jkotas commented Jan 23, 2026

Add a test for these EH notifications under src\tests\profile ?

cc @dotnet/dotnet-diag-contrib

@jkotas jkotas requested review from mdh1418 and noahfalk January 23, 2026 21:20
@noahfalk
Copy link
Member

Agreed a test case would be useful. Lets see how well copilot does at creating one!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Profiler] duplicated ExceptionUnwindFunctionEnter/ExceptionUnwindFunctionLeave callbacks when exception is thrown from try-finally block.

3 participants