Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ETW trace logging crash in multithreading situations #21566

Merged
merged 10 commits into from
Jul 31, 2024

Conversation

smk2007
Copy link
Member

@smk2007 smk2007 commented Jul 30, 2024

Description

ETW trace logger is fakely registered as initialized_ is marked as true before the registration is done, causing crashing issue for Lenovo camera application.

A prior attempt to address was made here: #21226
It was reverted here: #21360

Motivation and Context

The problem is that during initialization of TraceLoggingRegisterEx, it will reinvoke the callback and attempt reinitialization, which is not allowed. TraceLoggingRegisterEx however can be initialized concurrently when initialization happens on multiple threads. For these reasons it needs to be protected by a lock, but the lock cannot naively block because the callback's reinvocation will cause a deadlock.

To solve this problem another tracking variable is added : "initializing" which protects against reinitialization during the first initialization.

PatriceVignola
PatriceVignola previously approved these changes Jul 30, 2024
zhangxiang1993
zhangxiang1993 previously approved these changes Jul 30, 2024
@fdwr fdwr changed the title User/sheilk/fix logging Fix ETW trace logging crash in multithreading situations Jul 30, 2024
@smk2007 smk2007 dismissed stale reviews from zhangxiang1993 and PatriceVignola via 5c2d1bd July 30, 2024 22:59
@smk2007 smk2007 merged commit b341c44 into main Jul 31, 2024
90 of 95 checks passed
@smk2007 smk2007 deleted the user/sheilk/fix-logging branch July 31, 2024 15:59
Copy link
Contributor

@fdwr fdwr left a comment

Choose a reason for hiding this comment

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

👍

smk2007 added a commit that referenced this pull request Aug 2, 2024
ETW trace logger is fakely registered as initialized_ is marked as true
before the registration is done, causing crashing issue for Lenovo
camera application.

A prior attempt to address was made here:
#21226
It was reverted here:
#21360

The problem is that during initialization of TraceLoggingRegisterEx, it
will reinvoke the callback and attempt reinitialization, which is not
allowed. TraceLoggingRegisterEx however can be initialized concurrently
when initialization happens on multiple threads. For these reasons it
needs to be protected by a lock, but the lock cannot naively block
because the callback's reinvocation will cause a deadlock.

To solve this problem another tracking variable is added :
"initializing" which protects against reinitialization during the first
initialization.

---------

Co-authored-by: Sheil Kumar <[email protected]>
zhangxiang1993 added a commit that referenced this pull request Aug 9, 2024
…1603)

ETW trace logger is fakely registered as initialized_ is marked as true
before the registration is done, causing crashing issue for Lenovo
camera application.

A prior attempt to address was made here:
#21226 It was reverted
here:
#21360

The problem is that during initialization of TraceLoggingRegisterEx, it
will reinvoke the callback and attempt reinitialization, which is not
allowed. TraceLoggingRegisterEx however can be initialized concurrently
when initialization happens on multiple threads. For these reasons it
needs to be protected by a lock, but the lock cannot naively block
because the callback's reinvocation will cause a deadlock.

To solve this problem another tracking variable is added :
"initializing" which protects against reinitialization during the first
initialization.

---------

### Description
A few CI pipelines are disabled because they are no longer compatible
with this legacy GE branch.



### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->

---------

Co-authored-by: Sheil Kumar <[email protected]>
Co-authored-by: Xiang Zhang <[email protected]>
aamajumder pushed a commit that referenced this pull request Oct 14, 2024
### Description
ETW trace logger is fakely registered as initialized_ is marked as true
before the registration is done, causing crashing issue for Lenovo
camera application.

A prior attempt to address was made here:
#21226
It was reverted here:
#21360

### Motivation and Context
The problem is that during initialization of TraceLoggingRegisterEx, it
will reinvoke the callback and attempt reinitialization, which is not
allowed. TraceLoggingRegisterEx however can be initialized concurrently
when initialization happens on multiple threads. For these reasons it
needs to be protected by a lock, but the lock cannot naively block
because the callback's reinvocation will cause a deadlock.

To solve this problem another tracking variable is added :
"initializing" which protects against reinitialization during the first
initialization.

---------

Co-authored-by: Sheil Kumar <[email protected]>
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.

6 participants