Re: [PATCH 9/9] Use timer_settime for new platforms
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 28, 2014, 19:43 UTC
- Message-ID
- <xmqq61hc9z94.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <1409187862-21257-10-git-send-email-sortie@maxsi.org>
Jonas 'Sortie' Termansen <sortie@maxsi.org> writes:
Show 24 quoted lines
> setitimer() is an obsolescent XSI interface and may be removed in a > future standard. Applications should use the core POSIX timer_settime() > instead. > > This patch cleans up the progress reporting and changes it to try using > timer_settime, or if that fails, setitimer. If either function is not > provided by the system, then git-compat-util.h provides replacements > that always fail with ENOSYS. > > It's important that code doesn't simply check if timer_settime is > available as it can give false positives. Some systems like contemporary > OpenBSD provides the function, but it unconditionally fails with ENOSYS > at runtime. > > This approach allows the code using timer_settime() and setitimer() to > be simple and readable. My first attempt used #ifdef around each use of > timer_settime(), this quickly turned a into unmaintainable maze of > preprocessor conditionals. > > Signed-off-by: Jonas 'Sortie' Termansen <sortie@maxsi.org> > --- > builtin/log.c | 47 ++++++++++++++++++++++++++++++++++++++++------- > progress.c | 34 +++++++++++++++++++++++++++------- > 2 files changed, 67 insertions(+), 14 deletions(-)
Yuck. I didn't look at the change very carefully, but are the two interface so vastly different that you cannot emulate one in terms of the other, and use a single API at the callsites, isolating the knowledge of which kind of API is used to interact with the system timer in one place (perhaps in compat/itimer.c)?
Having to sprinkle "if (is_using_timer_settime)" around means we need to support two APIs at each and every callsite that wants timer interrupt actions.