components/apr/patches/port_getn_rc.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 11 Mar 2013 10:38:09 -0700
branchs11-update
changeset 2520 ceec631e74d1
parent 203 887f23af6934
permissions -rw-r--r--
Close of build 10.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
203
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     1
=== Patch is taken from
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     2
=== http://svn.apache.org/viewvc?view=revision&revision=836111
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     3
--- poll/unix/port.c.orig	2009-11-18 15:04:29.000000000 -0500
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     4
+++ poll/unix/port.c	2009-11-18 15:02:28.000000000 -0500
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     5
@@ -100,18 +100,27 @@
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     6
         tvptr = &tv;
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     7
     }
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     8
 
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     9
+    list[0].portev_user = (void *)-1; /* so we can double check that an
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    10
+                                       * event was returned
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    11
+                                       */
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    12
+
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    13
     ret = port_getn(port, list, max, nget, tvptr);
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    14
+    /* Note: 32-bit port_getn() on Solaris 10 x86 returns large negative 
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    15
+     * values instead of 0 when returning immediately.
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    16
+     */
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    17
 
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    18
-    if (ret < 0) {
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    19
+    if (ret == -1) {
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    20
         rv = apr_get_netos_error();
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    21
 
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    22
         switch(rv) {
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    23
         case EINTR:
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    24
         case ETIME:
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    25
-            if (*nget > 0) {
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    26
+            if (*nget > 0 && list[0].portev_user != (void *)-1) {
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    27
                 /* This confusing API can return an event at the same time
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    28
                  * that it reports EINTR or ETIME.  If that occurs, just
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    29
-                 * report the event.
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    30
+                 * report the event.  With EINTR, nget can be > 0 without
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    31
+                 * any event, so check that portev_user was filled in.
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    32
+                 *
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    33
                  * (Maybe it will be simplified; see thread
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    34
                  *   http://mail.opensolaris.org
887f23af6934 7035055 move apr and apr-util to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    35
                  *   /pipermail/networking-discuss/2009-August/011979.html