summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fix #424HEADmasterWolfgang Hommel2023-04-301-1/+1
|
* Merge pull request #422 from fixindan/dead_lock_no_returnWolfgang Hommel2023-02-251-9/+9
|\ | | | | Swapped out pthread_rwlock_xxlock(), which doesn't return if it can't…
| * Swapped out pthread_rwlock_xxlock(), which doesn't return if it can't obtain ↵Dixin Fan2023-02-241-9/+9
|/ | | | the lock, with pthread_rwlock_xxtrylock() followed by sched yield and error code return. The issue is sometimes a thread calling pthread_cond_init() or pthread_cond_destroy() can't acquire the lock when another thread is waiting on a condition variable notification via pthread_cond_timedwait(), and thus the thread calling pthread_cond_init() or pthread_cond_destroy() end up hanging indefinitely.
* Merge pull request #416 from sliquister/masterWolfgang Hommel2023-01-271-133/+41
|\ | | | | ensure faketime can't be initialized more than once
| * ensure faketime can't be initialized more than onceValentin Gatien-Baron2023-01-161-133/+41
|/ | | | | | | | | | | | One callsite of ftpl_init wasn't protected by the "if (!initialized)" condition, specifically: static void ftpl_init (void) __attribute__ ((constructor)); If another "constructor" was called before this one, and that other constructor used time or filesystem functions, ftlp_init would be initialized by that other constructor, and then reinitialized by the ftpl_init constructor. At that point, confusion ensues.
* Merge pull request #415 from usertam/masterWolfgang Hommel2022-12-201-0/+8
|\ | | | | libfaketime.c: wrap timespec_get in TIME_UTC macro
| * libfaketime.c: wrap timespec_get in TIME_UTC macroSamuel Tam2022-12-201-0/+8
|/ | | | | | | | | | Function `timespec_get` is not guaranteed to be declared in MacOS since its standard library is non-conformance to modern standards. Therefore, skip patching `timespec_get` if it is undeclared by the standard library. The detection of `timespec_get` is based on the conjecture that the macro `TIME_UTC` is only defined when `timespec_get` is declared.
* Fix for Debian Bug#1017865 as provided by Samuel ThibaultWolfgang Hommel2022-08-281-3/+3
|
* Merge pull request #408 from daglem/short_readWolfgang Hommel2022-08-281-2/+6
|\ | | | | Handle short reads from timestamp file
| * Handle short reads from timestamp fileDag Lem2022-08-221-2/+6
|/
* Merge pull request #406 from enr0n/masterWolfgang Hommel2022-08-101-1/+1
|\ | | | | test/snippets: fix time.c compiler error on 32-bit arches
| * test/snippets: fix time.c compiler error on 32-bit archesNick Rosbrook2022-08-101-1/+1
|/ | | | | | | | | | | | | | Cast t to unsigned long and use the %lu format specifier instead of %zd. This is more portable to 32-bit arches, avoiding the following compiler error: snippets/time.c:2:31: error: format ‘%zd’ expects argument of type ‘signed size_t’, but argument 3 has type ‘time_t’ {aka ‘long int’} [-Werror=format=] 2 | printf("[%s] time() yielded %zd\n", where, t); | ~~^ ~ | | | | int time_t {aka long int} | %ld cc1: all warnings being treated as errors
* Merge pull request #404 from perldude/perldude-issue-403Wolfgang Hommel2022-07-251-0/+3
|\ | | | | issue#403
| * issue#403Michael Sullivan2022-07-251-0/+3
| | | | | | | | Disable including `sys/time.h` on ARM to prevent conflicting declarations of `gettimeofday()`.
* | Merge pull request #397 from j-xella/sun_compilerWolfgang Hommel2022-07-251-9/+24
|\ \ | |/ |/| Refactor to get rid of some non-standard gcc extensions
| * Refactor to get rid of some non-standard gcc extensionsAleksandr Jakusev2022-05-261-9/+24
| | | | | | | | | | | | | | | | Without the changes Sun studio 12.8 compiler fails, for example Note that only the errors are fixed. On the compiler above, some warnings still remain, so -Werror has to be removed as well from the compiler switches in order for the compilation to succeed.
* | Merge pull request #400 from sveyret/shared-mem-syncWolfgang Hommel2022-06-201-2/+21
|\ \ | |/ |/| Reset shared memory when start time is reset
| * Reset shared memory when start time is resetStéphane Veyret2022-06-171-2/+21
|/
* honor dont_fake_monotonic in experimental sem_clockwait() (addresses #390)Wolfgang Hommel2022-05-161-0/+6
|
* fix reverse user_rate in sem_clockwait() (addresses #390)Wolfgang Hommel2022-05-141-6/+6
|
* Experimental sem_clockwait() support (addresses #390)Wolfgang Hommel2022-05-111-0/+50
|
* Merge pull request #391 from psychon/asan2Wolfgang Hommel2022-05-092-28/+53
|\ | | | | Fix another hang under ASAN
| * Fix another hang under ASANUli Schlachter2022-05-092-28/+53
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We have a long-running program that we want to run under sanitizers for extra error checking and under faketime to speed up the clock. This program hangs after a while. Backtraces suggest that the hangs occur because of recursion in the memory allocator, which apparently locks a non-recursive mutex. Specifically, what we see is that due to our use of FAKETIME_NO_CACHE=1, libfaketime wants to reload the config file inside a (random) call to clock_gettime(). libfaketime then uses fopen() / fclose() for reading the config files. These function allocate / free a buffer for reading data and specifically the call to free() that happens inside fclose() ends up calling clock_gettime() again. At this point, libfaketime locks up because it has a time_mutex that is locked and none-recursive. Sadly, I did not manage to come up with a stand-alone reproducer for this problem. Also, the above description is from memory after half a week of vacation, so it might be (partially) wrong. More information can be found here: - https://github.com/wolfcw/libfaketime/issues/365#issuecomment-1115802530 - https://github.com/wolfcw/libfaketime/issues/365#issuecomment-1116178907 This commit first adds a test case. This new test uses the already existing libmallocintercept.so to cause calls to clock_gettime() during memory allocation routines. The difference to the already existing version is that additionally FAKETIME_NO_CACHE and FAKETIME_TIMESTAMP_FILE are set. This new test hung with its last output suggesting a recursive call to malloc: Called malloc() from libmallocintercept...successfully Called free() on from libmallocintercept...successfully Called malloc() from libmallocintercept...Called malloc() from libmallocintercept... Sadly, gdb was unable to provide a meaningful backtrace for this hang. Next, I replaced the use of fopen()/fgets()/fgets() with open()/read()/close(). This code no longer reads the config file line-by-line, but instead it reads all of it at once and then "filters out" the result (ignores comment lines, removes end of line markers). I tried to keep the behaviour of the code the same, but I know at least one difference: Previously, the config file was read line-by-line and lines that began with a comment character were immediately ignored. The new code only reads the config once and then removes comment lines. Since the buffer that is used contains only 256 characters, it is possible that config files that were previously parsed correctly now longer parse. A specific example: if a file begins with 500 '#' characters in its first line and then a timestamp in the second line, the old code was able to parse this file while the new code would only see an empty file. After this change, the new test no longer hangs. Sadly, I do not actually know its effect on the "actual bug" that I wanted to fix, but since there are no longer any calls to fclose(), there cannot be any hangs inside fclose(). Signed-off-by: Uli Schlachter <psychon@znc.in>
* silence minor type warning in libmallocintercept.cWolfgang Hommel2022-05-081-1/+1
|
* silence minor type warning in libmallocintercept.cWolfgang Hommel2022-05-081-1/+2
|
* silence minor type warning in libmallocintercept.cWolfgang Hommel2022-05-081-2/+1
|
* silence minor type warning in libmallocintercept.cWolfgang Hommel2022-05-081-2/+2
|
* Merge pull request #389 from psychon/asanWolfgang Hommel2022-05-085-2/+113
|\ | | | | Work-around / fix libasan incompatibility
| * Add libmallocintercept.so to make cleanUli Schlachter2022-05-081-1/+1
| | | | | | | | Signed-off-by: Uli Schlachter <psychon@znc.in>
| * Disable FAILRE_PRE_INIT_CALLS by defaultUli Schlachter2022-05-082-6/+10
| | | | | | | | Signed-off-by: Uli Schlachter <psychon@znc.in>
| * Add FAIL_PRE_INIT_CALLS defineUli Schlachter2022-05-042-1/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a new define FAIL_PRE_INIT_CALLS. When that define is set, calls to clock_gettime() that occur before ftpl_init() was called (due to being marked with __attribute__((constructor))) will just fail and return -1. After this commit, the test case added in the previous commit no longer hangs. To make this actually work, this new define is enabled by default. Fixes: https://github.com/wolfcw/libfaketime/issues/365 Signed-off-by: Uli Schlachter <psychon@znc.in>
| * Add test reproducing ASAN-like hangsUli Schlachter2022-05-043-1/+92
|/ | | | | | | | | | | | | Backtraces suggest that AddressSanitizer replaces malloc() with a function that - locks a mutex and - calls clock_gettime() while the mutex is held This commit adds a test that implements a trivial malloc() that behaves similarly. Currently, this test hangs. Signed-off-by: Uli Schlachter <psychon@znc.in>
* Merge pull request #388 from dkg/cleanup-random-testsWolfgang Hommel2022-04-161-1/+1
|\ | | | | test: remember to clean up repeat_random
| * test: remember to clean up repeat_randomDaniel Kahn Gillmor2022-04-161-1/+1
| |
* | Merge pull request #387 from dkg/clean-syscall-testsWolfgang Hommel2022-04-161-1/+4
|\ \ | |/ |/| clean up tests related to syscall
| * tests: avoid testing syscall snippets if -DINTERCEPT_SYSCALL is not setDaniel Kahn Gillmor2022-04-161-0/+3
| | | | | | | | See https://bugs.debian.org/1007828
| * tests: clean whitespace in MakefileDaniel Kahn Gillmor2022-04-161-1/+1
|/
* Honor tv_nsec in timeouts on ppoll() calls (addresses #381)Wolfgang Hommel2022-04-021-1/+1
|
* select(): Scale timeout parameter by user rate on return (addresses #382)Wolfgang Hommel2022-04-021-0/+15
|
* Merge pull request #375 from inorton/fix_374_UFAKE_STATWolfgang Hommel2022-03-181-4/+10
|\ | | | | fixes #374 fix compiling without FAKE_STAT or with FAKE_UTIME
| * fixes #374 fix compiling without FAKE_STATIan Norton2022-03-181-4/+10
|/
* Update NEWS file about v0.9.10 changesWolfgang Hommel2022-03-041-0/+2
|
* Update release date to March 2022 for 0.9.10 (closes #366)v0.9.10Wolfgang Hommel2022-03-042-3/+3
|
* Documentation updated regarding FAKETIME_FORCE_MONOTONIC_FIXWolfgang Hommel2022-02-281-0/+22
|
* Limit glibc auto-sensing to compilation on glibc systems (addresses #369)Wolfgang Hommel2022-02-281-6/+8
|\
| * Exclude glibc versioning on macOS; bump autosense lower threshold to 2.24Wolfgang Hommel2022-02-261-8/+10
| |
* | Limit glibc auto-sensing to compilation on glibc systems (addresses #369)Wolfgang Hommel2022-02-281-0/+11
|/
* encourage forced monotonic fix issue reports during test (addresses #366)Wolfgang Hommel2022-02-251-1/+2
|
* dynamic forced monotonic fix autosense (addresses #366)Wolfgang Hommel2022-02-251-2/+17
|
* run-time envvar FAKETIME_FORCE_MONOTONIC_FIX, autosense stub (addresses #366)Wolfgang Hommel2022-02-251-3/+42
|