You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by mt...@apache.org on 2009/02/15 08:02:03 UTC

svn commit: r744616 - in /apr/apr/trunk/poll/unix: pollcb.c pollset.c

Author: mturk
Date: Sun Feb 15 07:02:03 2009
New Revision: 744616

URL: http://svn.apache.org/viewvc?rev=744616&view=rev
Log:
Add common functions for obtaining the pollset methods

Modified:
    apr/apr/trunk/poll/unix/pollcb.c
    apr/apr/trunk/poll/unix/pollset.c

Modified: apr/apr/trunk/poll/unix/pollcb.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/poll/unix/pollcb.c?rev=744616&r1=744615&r2=744616&view=diff
==============================================================================
--- apr/apr/trunk/poll/unix/pollcb.c (original)
+++ apr/apr/trunk/poll/unix/pollcb.c Sun Feb 15 07:02:03 2009
@@ -41,6 +41,36 @@
 extern apr_pollcb_provider_t *apr_pollcb_provider_poll;
 #endif
 
+static apr_pollcb_provider_t *pollcb_provider(apr_pollset_method_e method)
+{
+    apr_pollcb_provider_t *provider = NULL;
+    switch (method) {
+        case APR_POLLSET_KQUEUE:
+#if defined(HAVE_KQUEUE)
+            provider = apr_pollcb_provider_kqueue;
+#endif
+        break;
+        case APR_POLLSET_PORT:
+#if defined(HAVE_PORT_CREATE)
+            provider = apr_pollcb_provider_port;
+#endif
+        break;
+        case APR_POLLSET_EPOLL:
+#if defined(HAVE_EPOLL)
+            provider = apr_pollcb_provider_epoll;
+#endif
+        break;
+        case APR_POLLSET_POLL:
+#if defined(HAVE_POLL)
+            provider = apr_pollcb_provider_poll;
+#endif
+        break;
+        case APR_POLLSET_SELECT:
+        case APR_POLLSET_DEFAULT:
+        break;
+    }
+    return provider;
+}
 
 APR_DECLARE(apr_status_t) apr_pollcb_create_ex(apr_pollcb_t **pollcb,
                                                apr_uint32_t size,
@@ -54,31 +84,7 @@
     if (method == APR_POLLSET_DEFAULT)
         method = pollset_default_method;
     while (provider == NULL) {
-        switch (method) {
-            case APR_POLLSET_KQUEUE:
-#if defined(HAVE_KQUEUE)
-                provider = apr_pollcb_provider_kqueue;
-#endif
-            break;
-            case APR_POLLSET_PORT:
-#if defined(HAVE_PORT_CREATE)
-                provider = apr_pollcb_provider_port;
-#endif
-            break;
-            case APR_POLLSET_EPOLL:
-#if defined(HAVE_EPOLL)
-                provider = apr_pollcb_provider_epoll;
-#endif
-            break;
-            case APR_POLLSET_POLL:
-#if defined(HAVE_POLL)
-                provider = apr_pollcb_provider_poll;
-#endif
-            break;
-            case APR_POLLSET_SELECT:
-            case APR_POLLSET_DEFAULT:
-            break;
-        }
+        provider = pollcb_provider(method);
         if (!provider) {
             *pollcb = NULL;
             if ((flags & APR_POLLSET_NODEFAULT) == APR_POLLSET_NODEFAULT)
@@ -95,38 +101,13 @@
     (*pollcb)->provider = provider;
 
     rv = (*provider->create)(*pollcb, size, p, flags);
-    if (rv != APR_SUCCESS) {
+    if (rv == APR_ENOTIMPL) {
         if (method == pollset_default_method) {
             *pollcb = NULL;
             return rv;
         }
-        provider = NULL;
         /* Try with default provider */
-        switch (pollset_default_method) {
-            case APR_POLLSET_KQUEUE:
-#if defined(HAVE_KQUEUE)
-                provider = apr_pollcb_provider_kqueue;
-#endif
-            break;
-            case APR_POLLSET_PORT:
-#if defined(HAVE_PORT_CREATE)
-                provider = apr_pollcb_provider_port;
-#endif
-            break;
-            case APR_POLLSET_EPOLL:
-#if defined(HAVE_EPOLL)
-                provider = apr_pollcb_provider_epoll;
-#endif
-            break;
-            case APR_POLLSET_POLL:
-#if defined(HAVE_POLL)
-                provider = apr_pollcb_provider_poll;
-#endif
-            break;
-            case APR_POLLSET_SELECT:
-            case APR_POLLSET_DEFAULT:
-            break;
-        }
+        provider = pollcb_provider(pollset_default_method);
         if (!provider)
             return APR_ENOTIMPL;
         rv = (*provider->create)(*pollcb, size, p, flags);

Modified: apr/apr/trunk/poll/unix/pollset.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/poll/unix/pollset.c?rev=744616&r1=744615&r2=744616&view=diff
==============================================================================
--- apr/apr/trunk/poll/unix/pollset.c (original)
+++ apr/apr/trunk/poll/unix/pollset.c Sun Feb 15 07:02:03 2009
@@ -154,6 +154,39 @@
 #endif
 extern apr_pollset_provider_t *apr_pollset_provider_select;
 
+static apr_pollset_provider_t *pollset_provider(apr_pollset_method_e method)
+{
+    apr_pollset_provider_t *provider = NULL;
+    switch (method) {
+        case APR_POLLSET_KQUEUE:
+#if defined(HAVE_KQUEUE)
+            provider = apr_pollset_provider_kqueue;
+#endif
+        break;
+        case APR_POLLSET_PORT:
+#if defined(HAVE_PORT_CREATE)
+            provider = apr_pollset_provider_port;
+#endif
+        break;
+        case APR_POLLSET_EPOLL:
+#if defined(HAVE_EPOLL)
+            provider = apr_pollset_provider_epoll;
+#endif
+        break;
+        case APR_POLLSET_POLL:
+#if defined(HAVE_POLL)
+            provider = apr_pollset_provider_poll;
+#endif
+        break;
+        case APR_POLLSET_SELECT:
+            provider = apr_pollset_provider_select;
+        break;
+        case APR_POLLSET_DEFAULT:
+        break;
+    }
+    return provider;
+}
+
 APR_DECLARE(apr_status_t) apr_pollset_create_ex(apr_pollset_t **pollset,
                                                 apr_uint32_t size,
                                                 apr_pool_t *p,
@@ -166,33 +199,7 @@
     if (method == APR_POLLSET_DEFAULT)
         method = pollset_default_method;
     while (provider == NULL) {
-        switch (method) {
-            case APR_POLLSET_KQUEUE:
-#if defined(HAVE_KQUEUE)
-                provider = apr_pollset_provider_kqueue;
-#endif
-            break;
-            case APR_POLLSET_PORT:
-#if defined(HAVE_PORT_CREATE)
-                provider = apr_pollset_provider_port;
-#endif
-            break;
-            case APR_POLLSET_EPOLL:
-#if defined(HAVE_EPOLL)
-                provider = apr_pollset_provider_epoll;
-#endif
-            break;
-            case APR_POLLSET_POLL:
-#if defined(HAVE_POLL)
-                provider = apr_pollset_provider_poll;
-#endif
-            break;
-            case APR_POLLSET_SELECT:
-                provider = apr_pollset_provider_select;
-            break;
-            case APR_POLLSET_DEFAULT:
-            break;
-        }
+        provider = pollset_provider(method);
         if (!provider) {
             if ((flags & APR_POLLSET_NODEFAULT) == APR_POLLSET_NODEFAULT)
                 return APR_ENOTIMPL;
@@ -214,40 +221,12 @@
     (*pollset)->provider = provider;
 
     rv = (*provider->create)(*pollset, size, p, flags);
-    if (rv != APR_SUCCESS) {
+    if (rv == APR_ENOTIMPL) {
         if (method == pollset_default_method) {
             *pollset = NULL;
             return rv;
         }
-        provider = NULL;
-        /* Try with default provider */
-        switch (pollset_default_method) {
-            case APR_POLLSET_KQUEUE:
-#if defined(HAVE_KQUEUE)
-                provider = apr_pollset_provider_kqueue;
-#endif
-            break;
-            case APR_POLLSET_PORT:
-#if defined(HAVE_PORT_CREATE)
-                provider = apr_pollset_provider_port;
-#endif
-            break;
-            case APR_POLLSET_EPOLL:
-#if defined(HAVE_EPOLL)
-                provider = apr_pollset_provider_epoll;
-#endif
-            break;
-            case APR_POLLSET_POLL:
-#if defined(HAVE_POLL)
-                provider = apr_pollset_provider_poll;
-#endif
-            break;
-            case APR_POLLSET_SELECT:
-                provider = apr_pollset_provider_select;
-            break;
-            case APR_POLLSET_DEFAULT:
-            break;
-        }
+        provider = pollset_provider(method);
         if (!provider)
             return APR_ENOTIMPL;
         rv = (*provider->create)(*pollset, size, p, flags);
@@ -277,34 +256,13 @@
 
 APR_DECLARE(const char *) apr_poll_method_defname()
 {
-    switch (pollset_default_method) {
-        case APR_POLLSET_KQUEUE:
-#if defined(HAVE_KQUEUE)
-            return apr_pollset_provider_kqueue->name;
-#endif
-        break;
-        case APR_POLLSET_PORT:
-#if defined(HAVE_PORT_CREATE)
-            return apr_pollset_provider_port->name;
-#endif
-        break;
-        case APR_POLLSET_EPOLL:
-#if defined(HAVE_EPOLL)
-            return apr_pollset_provider_epoll->name;
-#endif
-        break;
-        case APR_POLLSET_POLL:
-#if defined(HAVE_POLL)
-            return apr_pollset_provider_poll->name;
-#endif
-        break;
-        case APR_POLLSET_SELECT:
-            return apr_pollset_provider_select->name;
-        break;
-        case APR_POLLSET_DEFAULT:
-        break;
-    }
-    return "unknown";
+    apr_pollset_provider_t *provider = NULL;
+
+    provider = pollset_provider(pollset_default_method);
+    if (provider)
+        return provider->name;
+    else
+        return "unknown";
 }
 
 APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset,