]> TLD Linux GIT Repositories - packages/apr.git/commitdiff
- upstream fixes
authorMarcin Krol <hawk@tld-linux.org>
Thu, 5 Feb 2015 07:24:34 +0000 (07:24 +0000)
committerMarcin Krol <hawk@tld-linux.org>
Thu, 5 Feb 2015 07:24:34 +0000 (07:24 +0000)
apr-svn.patch [new file with mode: 0644]

diff --git a/apr-svn.patch b/apr-svn.patch
new file mode 100644 (file)
index 0000000..c57f8f1
--- /dev/null
@@ -0,0 +1,633 @@
+diff -urNp apr-1.5.1/build/config.guess apr/build/config.guess
+--- apr-1.5.1/build/config.guess       2014-03-08 10:59:15.000000000 +0000
++++ apr/build/config.guess     2015-02-05 07:03:17.142489472 +0000
+@@ -2,7 +2,7 @@
+ # Attempt to guess a canonical system name.
+ #   Copyright 1992-2014 Free Software Foundation, Inc.
+-timestamp='2014-02-12'
++timestamp='2014-03-23'
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+@@ -826,7 +826,7 @@ EOF
+     *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+-    i*:MSYS*:*)
++    *:MSYS*:*)
+       echo ${UNAME_MACHINE}-pc-msys
+       exit ;;
+     i*:windows32*:*)
+@@ -969,10 +969,10 @@ EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+       ;;
+-    or1k:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++    openrisc*:Linux:*:*)
++      echo or1k-unknown-linux-${LIBC}
+       exit ;;
+-    or32:Linux:*:*)
++    or32:Linux:*:* | or1k*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     padre:Linux:*:*)
+diff -urNp apr-1.5.1/build/config.sub apr/build/config.sub
+--- apr-1.5.1/build/config.sub 2014-03-08 10:59:15.000000000 +0000
++++ apr/build/config.sub       2015-02-05 07:03:17.140488472 +0000
+@@ -2,7 +2,7 @@
+ # Configuration validation subroutine script.
+ #   Copyright 1992-2014 Free Software Foundation, Inc.
+-timestamp='2014-01-01'
++timestamp='2014-09-11'
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+@@ -283,8 +283,10 @@ case $basic_machine in
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
++      | mipsisa32r6 | mipsisa32r6el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
++      | mipsisa64r6 | mipsisa64r6el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipsr5900 | mipsr5900el \
+@@ -296,11 +298,11 @@ case $basic_machine in
+       | nds32 | nds32le | nds32be \
+       | nios | nios2 | nios2eb | nios2el \
+       | ns16k | ns32k \
+-      | open8 \
+-      | or1k | or32 \
++      | open8 | or1k | or1knd | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
+       | pyramid \
++      | riscv32 | riscv64 \
+       | rl78 | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+@@ -402,8 +404,10 @@ case $basic_machine in
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
++      | mipsisa32r6-* | mipsisa32r6el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
++      | mipsisa64r6-* | mipsisa64r6el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipsr5900-* | mipsr5900el-* \
+@@ -415,6 +419,7 @@ case $basic_machine in
+       | nios-* | nios2-* | nios2eb-* | nios2el-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
++      | or1k*-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+@@ -824,6 +829,10 @@ case $basic_machine in
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
++      moxiebox)
++              basic_machine=moxie-unknown
++              os=-moxiebox
++              ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+@@ -1369,14 +1378,14 @@ case $os in
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+-            | -uxpv* | -beos* | -mpeix* | -udk* \
++            | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+-            | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
++            | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+@@ -1594,9 +1603,6 @@ case $basic_machine in
+       mips*-*)
+               os=-elf
+               ;;
+-      or1k-*)
+-              os=-elf
+-              ;;
+       or32-*)
+               os=-coff
+               ;;
+diff -urNp apr-1.5.1/build/nw_export.inc apr/build/nw_export.inc
+--- apr-1.5.1/build/nw_export.inc      2005-10-28 16:40:38.000000000 +0000
++++ apr/build/nw_export.inc    2015-02-05 07:03:17.143489972 +0000
+@@ -15,6 +15,7 @@
+ #include "apr_dso.h"
+ #include "apr_env.h"
+ #include "apr_errno.h"
++#include "apr_escape.h"
+ #include "apr_file_info.h"
+ #include "apr_file_io.h"
+ #include "apr_fnmatch.h"
+@@ -34,6 +35,7 @@
+ #include "apr_random.h"
+ #include "apr_shm.h"
+ #include "apr_signal.h"
++#include "apr_skiplist.h"
+ #include "apr_strings.h"
+ #include "apr_support.h"
+ #include "apr_tables.h"
+diff -urNp apr-1.5.1/CHANGES apr/CHANGES
+--- apr-1.5.1/CHANGES  2014-04-15 23:29:09.000000000 +0000
++++ apr/CHANGES        2015-02-05 07:03:17.391613971 +0000
+@@ -1,4 +1,28 @@
+                                                      -*- coding: utf-8 -*-
++Changes for APR 1.5.2
++
++  *) apr_pollset: On z/OS, threadsafe apr_pollset_poll() may return
++     "EDC8102I Operation would block" under load.
++     [Pat Odonnell <patod us.ibm.com>]
++
++  *) On z/OS, apr_sockaddr_info_get() with family == APR_UNSPEC was not 
++     returning IPv4 addresses if any IPv6 addresses were returned. 
++     [Eric Covener]
++
++  *) Windows cmake build: Fix an incompatibility with cmake 2.8.12 and
++     later.  [Jeff Trawick]
++
++  *) apr_global_mutex/apr_proc_mutex: Resolve failures with the 
++     POSIX sem implementation in environments which receive signals.
++     [Jeff Trawick]
++
++  *) apr_skiplist: Fix potential corruption of skiplists leading to 
++     results or crashes. [Takashi Sato <takashi tks st>, Eric Covener]
++     PR 56654.
++
++  *) Improve platform detection by updating config.guess and config.sub.
++     [Rainer Jung]
++
+ Changes for APR 1.5.1
+   *) apr_os_proc_mutex_get() on Unix:  Avoid segfault for cross-
+@@ -37,8 +61,8 @@ Changes for APR 1.5.1
+   *) Correct a regression in 1.5.0 which affected out-of-tree
+      builds on Unix.  [Rainer Jung]
+-  *) Improve platform detection for bundled expat by updating
+-     config.guess and config.sub. [Rainer Jung]
++  *) Improve platform detection by updating config.guess and config.sub.
++     [Rainer Jung]
+ Changes for APR 1.5.0
+diff -urNp apr-1.5.1/CMakeLists.txt apr/CMakeLists.txt
+--- apr-1.5.1/CMakeLists.txt   2014-01-20 14:16:10.000000000 +0000
++++ apr/CMakeLists.txt 2015-02-05 07:03:16.646241471 +0000
+@@ -234,6 +234,7 @@ SET(APR_TEST_SOURCES
+   test/testprocmutex.c
+   test/testrand.c
+   test/testshm.c
++  test/testskiplist.c
+   test/testsleep.c
+   test/testsock.c
+   test/testsockets.c
+@@ -252,7 +253,6 @@ SET(APR_TEST_SOURCES
+ SET(install_targets)
+ SET(install_bin_pdb)
+-SET(install_lib_pdb)
+ # libapr-1 is shared, apr-1 is static
+ ADD_LIBRARY(libapr-1 SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libapr.rc)
+@@ -264,7 +264,6 @@ ADD_DEPENDENCIES(libapr-1 test_char_head
+ ADD_LIBRARY(apr-1 STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED})
+ SET(install_targets ${install_targets} apr-1)
+-SET(install_lib_pdb ${install_lib_pdb} ${PROJECT_BINARY_DIR}/apr-1.pdb)
+ TARGET_LINK_LIBRARIES(apr-1 ${APR_SYSTEM_LIBS})
+ SET_TARGET_PROPERTIES(apr-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;WINNT")
+ ADD_DEPENDENCIES(apr-1 test_char_header)
+@@ -272,12 +271,10 @@ ADD_DEPENDENCIES(apr-1 test_char_header)
+ # libaprapp-1 and aprapp-1 are static
+ ADD_LIBRARY(libaprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED})
+ SET(install_targets ${install_targets} libaprapp-1)
+-SET(install_lib_pdb ${install_lib_pdb} ${PROJECT_BINARY_DIR}/libaprapp-1.pdb)
+ SET_TARGET_PROPERTIES(libaprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_APP;WINNT")
+ ADD_LIBRARY(aprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED})
+ SET(install_targets ${install_targets} aprapp-1)
+-SET(install_lib_pdb ${install_lib_pdb} ${PROJECT_BINARY_DIR}/aprapp-1.pdb)
+ SET_TARGET_PROPERTIES(aprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;APR_APP;WINNT")
+ IF(APR_BUILD_TESTAPR)
+@@ -394,10 +391,6 @@ IF(INSTALL_PDB)
+   INSTALL(FILES ${install_bin_pdb}
+           DESTINATION bin
+           CONFIGURATIONS RelWithDebInfo Debug)
+-
+-  INSTALL(FILES ${install_lib_pdb}
+-          DESTINATION lib
+-          CONFIGURATIONS RelWithDebInfo Debug)
+ ENDIF()
+ INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include)
+diff -urNp apr-1.5.1/include/apr_skiplist.h apr/include/apr_skiplist.h
+--- apr-1.5.1/include/apr_skiplist.h   2013-11-17 18:27:39.000000000 +0000
++++ apr/include/apr_skiplist.h 2015-02-05 07:03:16.824330472 +0000
+@@ -229,7 +229,7 @@ APR_DECLARE(void) apr_skiplist_remove_al
+ APR_DECLARE(void) apr_skiplist_destroy(apr_skiplist *sl, apr_skiplist_freefunc myfree);
+ /**
+- * Return the first element in the skip list, leaving the element in the skip list.
++ * Return the first element in the skip list, removing the element from the skip list.
+  * @param sl The skip list
+  * @param myfree A function to be called for the removed element
+  * @remark NULL will be returned if there are no elements
+diff -urNp apr-1.5.1/locks/unix/proc_mutex.c apr/locks/unix/proc_mutex.c
+--- apr-1.5.1/locks/unix/proc_mutex.c  2014-04-13 18:13:41.000000000 +0000
++++ apr/locks/unix/proc_mutex.c        2015-02-05 07:03:17.394615472 +0000
+@@ -114,7 +114,9 @@ static apr_status_t proc_mutex_posix_cre
+         usec = apr_time_usec(now);
+         apr_snprintf(semname, sizeof(semname), "/ApR.%lxZ%lx", sec, usec);
+     }
+-    psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1);
++    do {
++        psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1);
++    } while (psem == (sem_t *)SEM_FAILED && errno == EINTR);
+     if (psem == (sem_t *)SEM_FAILED) {
+         if (errno == ENAMETOOLONG) {
+             /* Oh well, good try */
+@@ -122,7 +124,9 @@ static apr_status_t proc_mutex_posix_cre
+         } else {
+             return errno;
+         }
+-        psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1);
++        do {
++            psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1);
++        } while (psem == (sem_t *)SEM_FAILED && errno == EINTR);
+     }
+     if (psem == (sem_t *)SEM_FAILED) {
+@@ -140,7 +144,12 @@ static apr_status_t proc_mutex_posix_cre
+ static apr_status_t proc_mutex_posix_acquire(apr_proc_mutex_t *mutex)
+ {
+-    if (sem_wait(mutex->psem_interproc) < 0) {
++    int rc;
++
++    do {
++        rc = sem_wait(mutex->psem_interproc);
++    } while (rc < 0 && errno == EINTR);
++    if (rc < 0) {
+         return errno;
+     }
+     mutex->curr_locked = 1;
+@@ -149,7 +158,12 @@ static apr_status_t proc_mutex_posix_acq
+ static apr_status_t proc_mutex_posix_tryacquire(apr_proc_mutex_t *mutex)
+ {
+-    if (sem_trywait(mutex->psem_interproc) < 0) {
++    int rc;
++
++    do {
++        rc = sem_trywait(mutex->psem_interproc);
++    } while (rc < 0 && errno == EINTR);
++    if (rc < 0) {
+         if (errno == EAGAIN) {
+             return APR_EBUSY;
+         }
+diff -urNp apr-1.5.1/Makefile.in apr/Makefile.in
+--- apr-1.5.1/Makefile.in      2014-03-17 15:10:26.000000000 +0000
++++ apr/Makefile.in    2015-02-05 07:03:17.325580971 +0000
+@@ -129,11 +129,11 @@ check: $(TARGET_LIB)
+ etags:
+       etags `find . -name '*.[ch]'`
+-make_tools_dir:
++OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
++tools/gen_test_char.lo: tools/gen_test_char.c
+       $(APR_MKDIR) tools
++      $(LT_COMPILE)
+-OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
+-tools/gen_test_char.lo: make_tools_dir
+ tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char)
+       $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
+diff -urNp apr-1.5.1/memory/unix/apr_pools.c apr/memory/unix/apr_pools.c
+--- apr-1.5.1/memory/unix/apr_pools.c  2011-10-15 21:26:14.000000000 +0000
++++ apr/memory/unix/apr_pools.c        2015-02-05 07:03:17.389612972 +0000
+@@ -1135,21 +1135,12 @@ APR_DECLARE(char *) apr_pvsprintf(apr_po
+      * room to hold the NUL terminator.
+      */
+     if (ps.node->first_avail == ps.node->endp) {
+-        if (psprintf_flush(&ps.vbuff) == -1) {
+-            if (pool->abort_fn) {
+-                pool->abort_fn(APR_ENOMEM);
+-            }
+-
+-            return NULL;
+-        }
++        if (psprintf_flush(&ps.vbuff) == -1)
++           goto error;
+     }
+-    if (apr_vformatter(psprintf_flush, &ps.vbuff, fmt, ap) == -1) {
+-        if (pool->abort_fn)
+-            pool->abort_fn(APR_ENOMEM);
+-
+-        return NULL;
+-    }
++    if (apr_vformatter(psprintf_flush, &ps.vbuff, fmt, ap) == -1)
++        goto error;
+     strp = ps.vbuff.curpos;
+     *strp++ = '\0';
+@@ -1195,6 +1186,15 @@ APR_DECLARE(char *) apr_pvsprintf(apr_po
+     list_insert(active, node);
+     return strp;
++
++error:
++    if (pool->abort_fn)
++        pool->abort_fn(APR_ENOMEM);
++    if (ps.got_a_new_node) {
++        ps.node->next = ps.free;
++        allocator_free(pool->allocator, ps.node);
++    }
++    return NULL;
+ }
+diff -urNp apr-1.5.1/misc/unix/errorcodes.c apr/misc/unix/errorcodes.c
+--- apr-1.5.1/misc/unix/errorcodes.c   2011-03-21 16:55:11.000000000 +0000
++++ apr/misc/unix/errorcodes.c 2015-02-05 07:03:17.030433472 +0000
+@@ -39,6 +39,8 @@ static char *stuffbuffer(char *buf, apr_
+ static char *apr_error_string(apr_status_t statcode)
+ {
+     switch (statcode) {
++    case APR_ENOSTAT:
++        return "Could not perform a stat on the file.";
+     case APR_ENOPOOL:
+         return "A new pool could not be created.";
+     case APR_EBADDATE:
+@@ -73,7 +75,10 @@ static char *apr_error_string(apr_status
+         return "The specified IP address is invalid.";
+     case APR_EBADMASK:
+         return "The specified network mask is invalid.";
+-
++    case APR_ESYMNOTFOUND:
++        return "Could not find the requested symbol.";
++    case APR_ENOTENOUGHENTROPY:
++        return "Not enough entropy to continue.";
+     case APR_INCHILD:
+         return
+           "Your code just forked, and you are currently executing in the "
+@@ -128,10 +133,12 @@ static char *apr_error_string(apr_status
+         return "The given path is misformatted or contained invalid characters";
+     case APR_EPATHWILD:
+         return "The given path contained wildcard characters";
++    case APR_EBUSY:
++        return "The given lock was busy.";
+     case APR_EPROC_UNKNOWN:
+         return "The process is not recognized.";
+     case APR_EGENERAL:
+-        return "Internal error";
++        return "Internal error (specific information not available)";
+     default:
+         return "Error string not specified yet";
+     }
+diff -urNp apr-1.5.1/network_io/unix/sockaddr.c apr/network_io/unix/sockaddr.c
+--- apr-1.5.1/network_io/unix/sockaddr.c       2013-11-12 14:26:22.000000000 +0000
++++ apr/network_io/unix/sockaddr.c     2015-02-05 07:03:16.784310472 +0000
+@@ -325,6 +325,16 @@ static apr_status_t call_resolver(apr_so
+         hints.ai_flags = AI_ADDRCONFIG;
+     }
+ #endif
++
++#ifdef __MVS__
++    /* z/OS will not return IPv4 address under AF_UNSPEC if any IPv6 results 
++     * are returned, w/o AI_ALL. 
++     */
++    if (family == APR_UNSPEC) { 
++       hints.ai_flags |= AI_ALL;
++    }
++#endif
++
+     if(hostname == NULL) {
+ #ifdef AI_PASSIVE 
+         /* If hostname is NULL, assume we are trying to bind to all
+diff -urNp apr-1.5.1/poll/unix/z_asio.c apr/poll/unix/z_asio.c
+--- apr-1.5.1/poll/unix/z_asio.c       2014-01-25 18:22:55.000000000 +0000
++++ apr/poll/unix/z_asio.c     2015-02-05 07:03:17.253544972 +0000
+@@ -379,6 +379,7 @@ static apr_status_t asio_pollset_add(apr
+             APR_RING_REMOVE(elem, link);
+             DBG1(3, "used recycled memory at %08p\n", elem);
+             elem->state = ASIO_INIT;
++            elem->a.aio_cflags = 0;
+         }
+         else {
+             elem = (asio_elem_t *) apr_pcalloc(pollset->pool, sizeof(asio_elem_t));
+@@ -659,6 +660,7 @@ static apr_status_t asio_pollset_poll(ap
+             if (ret == 1) {
+                 DBG(4, "asyncio() completed inline\n");
+                 /* it's ready now */
++                elem->state = ASIO_COMPLETE;
+                 APR_RING_INSERT_TAIL(&(priv->ready_ring), elem, asio_elem_t,
+                                      link);
+             }
+diff -urNp apr-1.5.1/tables/apr_skiplist.c apr/tables/apr_skiplist.c
+--- apr-1.5.1/tables/apr_skiplist.c    2013-09-30 13:01:21.000000000 +0000
++++ apr/tables/apr_skiplist.c  2015-02-05 07:03:17.392614471 +0000
+@@ -387,11 +387,9 @@ APR_DECLARE(apr_skiplistnode *) apr_skip
+             (apr_skiplistnode *)apr_skiplist_alloc(sl, sizeof(apr_skiplistnode));
+         sl->top->up->down = sl->top;
+         sl->top = sl->topend = sl->top->up;
+-#if 0
+         sl->top->prev = sl->top->next = sl->top->nextindex =
+             sl->top->previndex = sl->top->up = NULL;
+         sl->top->data = NULL;
+-#endif
+         sl->top->sl = sl;
+     }
+     ch = sl->height;
+diff -urNp apr-1.5.1/test/abts_tests.h apr/test/abts_tests.h
+--- apr-1.5.1/test/abts_tests.h        2013-10-09 21:24:03.000000000 +0000
++++ apr/test/abts_tests.h      2015-02-05 07:03:16.655245972 +0000
+@@ -67,7 +67,8 @@ const struct testlist {
+     {testtime},
+     {testud},
+     {testuser},
+-    {testvsn}
++    {testvsn},
++    {testskiplist}
+ };
+ #endif /* APR_TEST_INCLUDES */
+diff -urNp apr-1.5.1/test/Makefile.in apr/test/Makefile.in
+--- apr-1.5.1/test/Makefile.in 2013-10-10 21:31:21.000000000 +0000
++++ apr/test/Makefile.in       2015-02-05 07:03:16.648242471 +0000
+@@ -29,7 +29,7 @@ TESTS = testtime.lo teststr.lo testvsn.l
+       testhash.lo testargs.lo testnames.lo testuser.lo testpath.lo \
+       testenv.lo testprocmutex.lo testfnmatch.lo testatomic.lo testflock.lo \
+       testsock.lo testglobalmutex.lo teststrnatcmp.lo testfilecopy.lo \
+-      testtemp.lo testlfs.lo testcond.lo testescape.lo
++      testtemp.lo testlfs.lo testcond.lo testescape.lo testskiplist.lo
+ OTHER_PROGRAMS = \
+       echod@EXEEXT@ \
+diff -urNp apr-1.5.1/test/testskiplist.c apr/test/testskiplist.c
+--- apr-1.5.1/test/testskiplist.c      1970-01-01 00:00:00.000000000 +0000
++++ apr/test/testskiplist.c    2015-02-05 07:03:16.741288971 +0000
+@@ -0,0 +1,100 @@
++/* Licensed to the Apache Software Foundation (ASF) under one or more
++ * contributor license agreements.  See the NOTICE file distributed with
++ * this work for additional information regarding copyright ownership.
++ * The ASF licenses this file to You under the Apache License, Version 2.0
++ * (the "License"); you may not use this file except in compliance with
++ * the License.  You may obtain a copy of the License at
++ *
++ *     http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++#include "testutil.h"
++#include "apr.h"
++#include "apr_strings.h"
++#include "apr_general.h"
++#include "apr_pools.h"
++#include "apr_skiplist.h"
++#if APR_HAVE_STDIO_H
++#include <stdio.h>
++#endif
++#if APR_HAVE_STDLIB_H
++#include <stdlib.h>
++#endif
++#if APR_HAVE_STRING_H
++#include <string.h>
++#endif
++
++static void add_int_to_skiplist(apr_skiplist *list, int n){
++    int* a = apr_skiplist_alloc(list, sizeof(int));
++    *a = n;
++    apr_skiplist_insert(list, a);
++}
++
++static int comp(void *a, void *b){
++    return *((int*) a) - *((int*) b);
++}
++
++
++static int compk(void *a, void *b){
++    return comp(a, b);
++}
++
++static void skiplist_test(abts_case *tc, void *data) {
++    int test_elems = 10;
++    int i = 0, j = 0;
++    int *val = NULL;
++    apr_skiplist * list = NULL;
++    apr_pool_t *p;
++
++    apr_pool_create(&p, NULL);
++    apr_skiplist_init(&list, p);
++    apr_skiplist_set_compare(list, comp, compk);
++    
++    /* insert 10 objects */
++    for (i = 0; i < test_elems; ++i){
++        add_int_to_skiplist(list, i);
++    }
++
++    /* remove all objects */
++    while ((val = apr_skiplist_pop(list, NULL))){
++        ABTS_INT_EQUAL(tc, *val, j++);
++    }
++
++    /* insert 10 objects again */
++    for (i = test_elems; i < test_elems+test_elems; ++i){
++        add_int_to_skiplist(list, i);
++    }
++
++    j = test_elems;
++    while ((val = apr_skiplist_pop(list, NULL))){
++        ABTS_INT_EQUAL(tc, *val, j++);
++    }
++
++    /* empty */
++    val = apr_skiplist_pop(list, NULL);
++    ABTS_PTR_EQUAL(tc, val, NULL);
++
++    add_int_to_skiplist(list, 42);
++    val = apr_skiplist_pop(list, NULL);
++    ABTS_INT_EQUAL(tc, *val, 42); 
++
++    /* empty */
++    val = apr_skiplist_pop(list, NULL);
++    ABTS_PTR_EQUAL(tc, val, NULL);
++}
++
++abts_suite *testskiplist(abts_suite *suite)
++{
++    suite = ADD_SUITE(suite)
++
++    abts_run_test(suite, skiplist_test, NULL);
++
++    return suite;
++}
++
+diff -urNp apr-1.5.1/test/testutil.h apr/test/testutil.h
+--- apr-1.5.1/test/testutil.h  2013-10-09 21:24:03.000000000 +0000
++++ apr/test/testutil.h        2015-02-05 07:03:16.671253971 +0000
+@@ -103,5 +103,6 @@ abts_suite *testtime(abts_suite *suite);
+ abts_suite *testud(abts_suite *suite);
+ abts_suite *testuser(abts_suite *suite);
+ abts_suite *testvsn(abts_suite *suite);
++abts_suite *testskiplist(abts_suite *suite);
+ #endif /* APR_TEST_INCLUDES */
+diff -urNp apr-1.5.1/threadproc/netware/thread.c apr/threadproc/netware/thread.c
+--- apr-1.5.1/threadproc/netware/thread.c      2011-02-18 11:24:40.000000000 +0000
++++ apr/threadproc/netware/thread.c    2015-02-05 07:03:17.006421471 +0000
+@@ -77,7 +77,7 @@ apr_status_t apr_thread_create(apr_threa
+                                apr_pool_t *pool)
+ {
+     apr_status_t stat;
+-    long flags = NX_THR_BIND_CONTEXT;
++    unsigned long flags = NX_THR_BIND_CONTEXT;
+     char threadName[NX_MAX_OBJECT_NAME_LEN+1];
+     size_t stack_size = APR_DEFAULT_STACK_SIZE;
+@@ -120,8 +120,8 @@ apr_status_t apr_thread_create(apr_threa
+         /* void(*start_routine)(void *arg) */ (void (*)(void *)) dummy_worker,
+         /* void *arg */                       (*new),
+         /* int priority */                    NX_PRIO_MED,
+-        /* NXSize_t stackSize */              stack_size,
+-        /* long flags */                      NX_CTX_NORMAL,
++        /* size_t stackSize */                stack_size,
++        /* unsigned long flags */             NX_CTX_NORMAL,
+         /* int *error */                      &stat);
+     stat = NXContextSetName(
+@@ -130,7 +130,7 @@ apr_status_t apr_thread_create(apr_threa
+     stat = NXThreadCreate(
+         /* NXContext_t context */     (*new)->ctx,
+-        /* long flags */              flags,
++        /* unsigned long flags */     flags,
+         /* NXThreadId_t *thread_id */ &(*new)->td);
+     if (stat == 0)