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

Add FAKETIME_IGNORE_SYMBOLS to skip unneeded dlsym #463

Merged
merged 1 commit into from
Mar 19, 2024

Conversation

Rob--W
Copy link
Contributor

@Rob--W Rob--W commented Mar 12, 2024

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 a malloc call while the initial malloc call is initializing, infinite recursion or a deadlock may occur. One of the causes is a malloc call by dlsym / dlvsym, when the requested symbol cannot be resolved. To avoid triggering this condition, this patch introduces a way to avoid dlsym / dlvsym calls under these conditions.

The feature consists of two environment variables:

First, launch faketime with the FAKETIME_DEBUG_DLSYM=1 environment variable to identify the non-resolving symbols:

$ FAKETIME_DEBUG_DLSYM=1 faketime 2024-03-12 date
[FAKETIME_DEBUG_DLSYM] Cannot find symbol: __ftime
[FAKETIME_DEBUG_DLSYM] Cannot find symbol: timer_settime@GLIBC_2.2
[FAKETIME_DEBUG_DLSYM] Cannot find symbol: timer_gettime@GLIBC_2.2
Tue Mar 12 12:00:00 AM CET 2024

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

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.

2 participants