+2012-12-20 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/55741
+ * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Check for Sleep.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+ * src/c++11/thread.cc (__sleep_for): Use Sleep if available.
+
2012-12-18 Jonathan Wakely <jwakely.gcc@gmail.com>
* doc/xml/manual/abi.xml: Update URLs for C++ ABI.
AC_MSG_RESULT($ac_has_usleep)
fi
+ if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
+ AC_MSG_CHECKING([for Sleep])
+ AC_TRY_COMPILE([#include <windows.h>],
+ [Sleep(1)],
+ [ac_has_win32_sleep=yes],[ac_has_win32_sleep=no])
+ if test x"$ac_has_win32_sleep" = x"yes"; then
+ AC_DEFINE(HAVE_WIN32_SLEEP,1, [Defined if Sleep exists.])
+ fi
+ AC_MSG_RESULT($ac_has_win32_sleep)
+ fi
+
AC_SUBST(GLIBCXX_LIBS)
CXXFLAGS="$ac_save_CXXFLAGS"
/* Define to 1 if you have the <wctype.h> header file. */
#undef HAVE_WCTYPE_H
+/* Defined if Sleep exists. */
+#undef HAVE_WIN32_SLEEP
+
/* Define if writev is available in <sys/uio.h>. */
#undef HAVE_WRITEV
$as_echo "$ac_has_usleep" >&6; }
fi
+ if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Sleep" >&5
+$as_echo_n "checking for Sleep... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <windows.h>
+int
+main ()
+{
+Sleep(1)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_has_win32_sleep=yes
+else
+ ac_has_win32_sleep=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test x"$ac_has_win32_sleep" = x"yes"; then
+
+$as_echo "#define HAVE_WIN32_SLEEP 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_win32_sleep" >&5
+$as_echo "$ac_has_win32_sleep" >&6; }
+ fi
+
CXXFLAGS="$ac_save_CXXFLAGS"
#ifndef _GLIBCXX_USE_NANOSLEEP
# ifdef _GLIBCXX_HAVE_SLEEP
# include <unistd.h>
+# elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
+# include <windows.h>
# else
# error "No sleep function known for this target"
# endif
static_cast<long>(__ns.count())
};
::nanosleep(&__ts, 0);
-#else
-# ifdef _GLIBCXX_HAVE_SLEEP
-# ifdef _GLIBCXX_HAVE_USLEEP
+#elif defined(_GLIBCXX_HAVE_SLEEP)
+# ifdef _GLIBCXX_HAVE_USLEEP
::sleep(__s.count());
if (__ns.count() > 0)
{
__us = 1;
::usleep(__us);
}
-# else
+# else
::sleep(__s.count() + (__ns >= 1000000));
-# endif
# endif
+#elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
+ unsigned long ms = __ns.count() / 1000000;
+ if (__ns.count() > 0 && ms == 0)
+ ms = 1;
+ ::Sleep(chrono::milliseconds(__s).count() + ms);
#endif
}