RE: [PATCH v3] Support for setitimer() on platforms lacking it

2012-09-07 Thread Joachim Schmitz
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 
---
 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)
 #
diff --git a/compat/itimer.c b/compat/itimer.c
deleted file mode 100644
index 713f1ff..000
--- 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 > 100
-   || 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
+#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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] Support for setitimer() on platforms lacking it

2012-09-07 Thread Junio C Hamano
"Joachim Schmitz"  writes:

> 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 

The end-result looks simple and nice (thanks for NO_STRUCT_ITIMERVAL).

As we are not going to include the earlier failed attempt in our
longer-term history (i.e. 'master', that never rewinds), however,
I would prefer to see a replacement patch (as opposed to this one
that incrementally updates the previous failed attempt).  I could
squash this into the previous one myself though ;-)

Thanks.

> ---
>  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)
>  #
> diff --git a/compat/itimer.c b/compat/itimer.c
> deleted file mode 100644
> index 713f1ff..000
> --- 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 > 100
> - || 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
> +#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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH v3] Support for setitimer() on platforms lacking it

2012-09-07 Thread Joachim Schmitz
> From: Junio C Hamano [mailto:gits...@pobox.com]
> Sent: Friday, September 07, 2012 6:41 PM
> To: Joachim Schmitz
> Cc: git@vger.kernel.org
> Subject: Re: [PATCH v3] Support for setitimer() on platforms lacking it
> 
> "Joachim Schmitz"  writes:
> 
> > 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 
> 
> The end-result looks simple and nice (thanks for NO_STRUCT_ITIMERVAL).
> 
> As we are not going to include the earlier failed attempt in our
> longer-term history (i.e. 'master', that never rewinds), however,
> I would prefer to see a replacement patch (as opposed to this one
> that incrementally updates the previous failed attempt).  I could
> squash this into the previous one myself though ;-)

Yes, please ;-)

Bye, Jojo

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH v3] Support for setitimer() on platforms lacking it

2012-09-08 Thread Joachim Schmitz
> From: Joachim Schmitz [mailto:j...@schmitz-digital.de]
> Sent: Friday, September 07, 2012 11:55 AM
> To: 'Junio C Hamano'
> Cc: 'git@vger.kernel.org'
> 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 
> ---
>  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..000
> --- 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 > 100
> - || 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html