[asterisk-commits] tilghman: branch tilghman/ast_select r281834 - in /team/tilghman/ast_select: ...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Aug 11 13:49:43 CDT 2010


Author: tilghman
Date: Wed Aug 11 13:49:39 2010
New Revision: 281834

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=281834
Log:
Use ppoll(2), if we have it.

Modified:
    team/tilghman/ast_select/configure
    team/tilghman/ast_select/configure.ac
    team/tilghman/ast_select/include/asterisk/autoconfig.h.in
    team/tilghman/ast_select/main/poll.c

Modified: team/tilghman/ast_select/configure.ac
URL: http://svnview.digium.com/svn/asterisk/team/tilghman/ast_select/configure.ac?view=diff&rev=281834&r1=281833&r2=281834
==============================================================================
--- team/tilghman/ast_select/configure.ac (original)
+++ team/tilghman/ast_select/configure.ac Wed Aug 11 13:49:39 2010
@@ -329,7 +329,7 @@
 AC_FUNC_STRTOD
 AC_FUNC_UTIME_NULL
 AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf ioperm])
+AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow ppoll putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf ioperm])
 
 AC_MSG_CHECKING(for timersub in time.h)
 AC_LINK_IFELSE(

Modified: team/tilghman/ast_select/include/asterisk/autoconfig.h.in
URL: http://svnview.digium.com/svn/asterisk/team/tilghman/ast_select/include/asterisk/autoconfig.h.in?view=diff&rev=281834&r1=281833&r2=281834
==============================================================================
--- team/tilghman/ast_select/include/asterisk/autoconfig.h.in (original)
+++ team/tilghman/ast_select/include/asterisk/autoconfig.h.in Wed Aug 11 13:49:39 2010
@@ -316,6 +316,9 @@
 
 /* Define to 1 if you have the `pow' function. */
 #undef HAVE_POW
+
+/* Define to 1 if you have the `ppoll' function. */
+#undef HAVE_PPOLL
 
 /* Define to 1 if you have the ISDN PRI library. */
 #undef HAVE_PRI

Modified: team/tilghman/ast_select/main/poll.c
URL: http://svnview.digium.com/svn/asterisk/team/tilghman/ast_select/main/poll.c?view=diff&rev=281834&r1=281833&r2=281834
==============================================================================
--- team/tilghman/ast_select/main/poll.c (original)
+++ team/tilghman/ast_select/main/poll.c Wed Aug 11 13:49:39 2010
@@ -260,13 +260,18 @@
 }
 #endif /* AST_POLL_COMPAT */
 
-/* Note: we intentionally do not use the ppoll(2) call on Linux, because while the
- * kernel modifies the tv argument, glibc hides the change from us, and we WANT to
- * be able to check how much time remains.  Chan_phone, in particular, depends upon
- * this behavior.
- */
 int ast_poll2(struct pollfd *pArray, unsigned long n_fds, struct timeval *tv)
 {
+#ifdef HAVE_PPOLL
+	struct timeval start = ast_tvnow();
+	struct timespec ts = { tv ? tv->tv_sec : 0, tv ? tv->tv_usec * 1000 : 0 };
+	int res = ppoll(pArray, n_fds, tv ? &ts : NULL, NULL);
+	struct timeval after = ast_tvnow();
+	if (res > 0 && tv && ast_tvdiff_ms(ast_tvadd(*tv, start), after) > 0) {
+		*tv = ast_tvsub(*tv, ast_tvsub(after, start));
+	}
+	return res;
+#else
 	ast_fdset read_descs, write_descs, except_descs;
 	int ready_descriptors, max_fd = 0;
 
@@ -285,6 +290,7 @@
 	}
 
 	return ready_descriptors;
-}
-
-
+#endif
+}
+
+




More information about the asterisk-commits mailing list