Skip to content

Conversation

github-actions[bot]
Copy link
Contributor

Backport de2174d from #5326

…5326)

Relates: elastic/apm-agent-dotnet#1094

This commit fixes a rather pernicious bug with Diagnostics from the clients,
following the upgrade to System.Diagnostics.DiagnosticSource 5.0.0.

`Diagnostic` and `Diagnostic<TState, TStateEnd>` derived from
System.Diagnostics.Activity, implementing IDisposable to make them
nicer to work with. In System.Diagnostics.DiagnosticSource 5.0.0, Activity now
implements IDisposable, so the impl was updated to override `Dispose(bool)`.

A problem arises from now deriving from Activity in that for an activity that is not finished,
`Dispose()` calls `Stop()` which in turn will notify the ActivitySource that it has stopped
**and** sets `Activity.Current` to the parent Activity (null if there's no parent). Now,
when calling into overridden `Dispose(bool)`, the DiagnosticSource is notified that
the `Activity` has stopped, allowing for listeners to take action. If a listener is getting
the Activity through `Activity.Current` as Elastic APM's integration does however,
`Activity.Current` no longer represents the Activity that has stopped, but its parent, with
no nice way to reference the stopped Activity.

This commit removes deriving from `Activity` and introduces a private field
in which to hold an Activity that is started, and ended on Dispose. Starting
and stopping the activity sets the start and end times, respectively.
@elasticmachine
Copy link
Collaborator

Since this is a community submitted pull request, a Jenkins build has not been kicked off automatically. Can an Elastic organization member please verify the contents of this patch and then kick off a build manually?

@stevejgordon stevejgordon merged commit 6f69452 into 7.11 Feb 17, 2021
@stevejgordon stevejgordon deleted the backport-5326-to-7.11 branch February 17, 2021 09:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants