Fix data race when create POSIX thread #3942
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When creating thread using pthread_create()
_pData->thread
will be set. It could lead to data race as in runnableEntry() we refer to that variable.Instead use pthread_self().
getName() is already under mutex.
Example stack trace:
Issue only occurs sometimes as
setThreadName
is called with null thread. I believe this is data race.In Thread_POSIX.cpp
We call pthread_create which should set
_pData->thread
,But in
ThreadImpl::runnableEntry
we already expect is set.I belive that replacting
pThreadImpl->_pData->thread
withpthread_self()
can help. Other way is to set thread name under mutex but it could conflict/deadlock withgetName()
as is already under mutex.Way other solution is to set thread name after pthread_create but again we would have deadlock with getName()