This might be an unfixable issue given the structure of faketime and the way that some runtimes behave, but i wanted to note it as an outstanding concern for people who come to the faketime bugtracker because they ran into this.
In this case, the observed behavior is quite typical for applications
which load system libraries (including time-related functions)
themselves at run-time. It basically means that the LD_PRELOAD mechanism
is somewhat bypassed by the application, which loads the real (not the
faking) library again after the linker has loaded the faking library.
Strange things (such as slow reactions with few-seconds-offsets or
endless hangs with larger offsets) occur when the application is
multi-threaded and one thread sees a faked time while another one uses
the real system time, and both try to synchronize.
If that's the case with iceweasel (idk for sure atm), there's nothing
libfaketime can do because that's a limitation of the LD_PRELOAD
mechanism. This is what makes faketime unusable with a few complex
runtime environments, such as the Sun Java JDK/JRE, and there currently
are no stable solutions known except for making the application
explicitly libfaketime-aware. That said, unless we figure out that this
is a libfaketime-internal bug and not a LD_PRELOAD limitation, there's
little hope that it can be changed anytime soon. I'd actually be very
happy about any suggestions on what to change about libfaketime to make
it work with such applications.
If there are more ideas about how to characterize the environments where it won't work, or suggestions about possible detection, avoidance or workarounds please note them here.
This might be an unfixable issue given the structure of faketime and the way that some runtimes behave, but i wanted to note it as an outstanding concern for people who come to the faketime bugtracker because they ran into this.
This was first reported in https://bugs.debian.org/753461 , where there is a fair bit of useful commentary.
over there, @wolfcw said:
If there are more ideas about how to characterize the environments where it won't work, or suggestions about possible detection, avoidance or workarounds please note them here.