Add FAKETIME_IGNORE_SYMBOLS to skip unneeded dlsym #463
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.
For a detailed analysis that resulted in this PR, see #130 (comment)
With some allocators (e.g. jemalloc), a circular dependency exists between
malloc
and libfaketime. When libfaketime triggers amalloc
call while the initialmalloc
call is initializing, infinite recursion or a deadlock may occur. One of the causes is amalloc
call bydlsym
/dlvsym
, when the requested symbol cannot be resolved. To avoid triggering this condition, this patch introduces a way to avoiddlsym
/dlvsym
calls under these conditions.The feature consists of two environment variables:
First, launch
faketime
with theFAKETIME_DEBUG_DLSYM=1
environment variable to identify the non-resolving symbols:Then, take the list of displayed symbols and concatenate them by a comma. Use this as the value for the
FAKETIME_IGNORE_SYMBOLS
environment variable:FAKETIME_IGNORE_SYMBOLS=__ftime,timer_settime@GLIBC_2.2,timer_gettime@GLIBC_2.2 faketime 2024-03-12 date