> From: Joachim Schmitz [mailto:jojo@xxxxxxxxxxxxxxxxxx] > Sent: Friday, September 07, 2012 11:55 AM > To: 'Junio C Hamano' > Cc: 'git@xxxxxxxxxxxxxxx' > Subject: RE: [PATCH v3] Support for setitimer() on platforms lacking it > > HP NonStop (currently) doesn't have setitimer(). The previous attempt of an > emulation (reverted by this commit) was not a real substitute for a recurring > itimer (as here we also don't have SA_RESTART, so can't re-arm the timer). > As setitimer() is only used in cases of perceived latency and it doesn't affect > correctness, it now gets disabled entirely, if NO_SETITIMER is set. > HP NonStop does provide struct itimerval, but other platforms may not, so this > is taken care of in this commit too, by setting NO_STRUCT_ITIMERVAL. > > Signed-off-by: Joachim Schmitz <jojo@xxxxxxxxxxxxxxxxxx> > --- > Makefile | 5 +++++ > compat/itimer.c | 50 -------------------------------------------------- > git-compat-util.h | 11 +++++++++-- > 3 files changed, 14 insertions(+), 52 deletions(-) > delete mode 100644 compat/itimer.c > > diff --git a/Makefile b/Makefile > index ac49320..7be555b 100644 > --- a/Makefile > +++ b/Makefile > @@ -157,6 +157,11 @@ all:: > # Define NO_PREAD if you have a problem with pread() system call (e.g. > # cygwin1.dll before v1.5.22). > # > +# Define NO_SETITIMER if you don't have setitimer() > +# > +# Define NO_STRUCT_ITIMERVAL if you don't have struct itimerval > +# This also implies NO_SETITIMER > +# > # Define NO_THREAD_SAFE_PREAD if your pread() implementation is not > # thread-safe. (e.g. compat/pread.c or cygwin) > # Here too (just like in my MKDIR_WO_TRAILING_SLASH patch) it is missing the part that adds ifdef NO_STRUCT_ITIMERVAL COMPAT_CFLAGS += -DNO_STRUCT_ITIMERVAL NO_SETITIMER=YesPlease endif ifdef NO_SETITIMER COMPAT_CFLAGS += -DNO_SETITIMER endif > diff --git a/compat/itimer.c b/compat/itimer.c > deleted file mode 100644 > index 713f1ff..0000000 > --- a/compat/itimer.c > +++ /dev/null > @@ -1,50 +0,0 @@ > -#include "../git-compat-util.h" > - > -static int git_getitimer(int which, struct itimerval *value) > -{ > - int ret = 0; > - > - switch (which) { > - case ITIMER_REAL: > - value->it_value.tv_usec = 0; > - value->it_value.tv_sec = alarm(0); > - ret = 0; /* if alarm() fails, we get a SIGLIMIT */ > - break; > - case ITIMER_VIRTUAL: /* FALLTHRU */ > - case ITIMER_PROF: errno = ENOTSUP; ret = -1; break; > - default: errno = EINVAL; ret = -1; > - } > - return ret; > -} > - > -int git_setitimer(int which, const struct itimerval *value, > - struct itimerval *ovalue) > -{ > - int ret = 0; > - > - if (!value > - || value->it_value.tv_usec < 0 > - || value->it_value.tv_usec > 1000000 > - || value->it_value.tv_sec < 0) { > - errno = EINVAL; > - return -1; > - } > - > - else if (ovalue) > - if (!git_getitimer(which, ovalue)) > - return -1; /* errno set in git_getitimer() */ > - > - else > - switch (which) { > - case ITIMER_REAL: > - alarm(value->it_value.tv_sec + > - (value->it_value.tv_usec > 0) ? 1 : 0); > - ret = 0; /* if alarm() fails, we get a SIGLIMIT */ > - break; > - case ITIMER_VIRTUAL: /* FALLTHRU */ > - case ITIMER_PROF: errno = ENOTSUP; ret = -1; break; > - default: errno = EINVAL; ret = -1; > - } > - > - return ret; > -} > diff --git a/git-compat-util.h b/git-compat-util.h > index 18089f0..4628d7a 100644 > --- a/git-compat-util.h > +++ b/git-compat-util.h > @@ -162,9 +162,16 @@ > #define probe_utf8_pathname_composition(a,b) > #endif > > +#ifdef NO_STRUCT_ITIMERVAL > +struct itimerval { > + struct timeval it_interval; > + struct timeval it_value; > +} > +#define NO_SETITIMER The above line gets obsolete with further up mentioned change in Makefile > +#endif > + > #ifdef NO_SETITIMER > -#define setitimer(a,b,c) git_setitimer((a),(b),(c)) > -extern int git_setitimer(int, const struct itimerval *, struct itimerval *); > +#define setitimer(which,value,ovalue) > #endif > > #ifdef MKDIR_WO_TRAILING_SLASH > -- > 1.7.12 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html