| APACHE PORTABLE RUNTIME (APR) LIBRARY STATUS: -*- coding: utf-8 -*- | |
| Last modified at [$Date$] | |
| The current version of this file can be found at: | |
| * http://svn.apache.org/repos/asf/apr/apr/trunk/STATUS | |
| NOTICE: | |
| Effective with version 2.0 , apr-util ceases to exist. For reference, | |
| the final standalone apr-util can be found in subversion at: | |
| * http://svn.apache.org/repos/asf/apr/apr-util/branches -r784519 | |
| Patches considered for backport are noted in their branches' STATUS: | |
| * http://svn.apache.org/repos/asf/apr/apr/branches/0.9.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr/branches/1.3.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr/branches/1.4.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr/branches/1.5.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr-util/branches/0.9.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr-util/branches/1.3.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr-util/branches/1.4.x/STATUS | |
| * http://svn.apache.org/repos/asf/apr/apr-util/branches/1.5.x/STATUS | |
| Releases: | |
| 2.0.0 : in development on trunk/ | |
| 1.7.0 : in development on branches/1.7.x | |
| 1.6.4 : in maintenance | |
| 1.6.3 : released October 22, 2017 | |
| 1.6.2 : released June 14, 2017 | |
| 1.6.1 : not released | |
| 1.6.0 : not released | |
| 1.5.2 : released April 29, 2015 | |
| 1.5.1 : released April 20, 2014 | |
| 1.5.0 : released November 18, 2013 | |
| 1.4.8 : released June 21, 2013 | |
| 1.4.7 : not released | |
| 1.4.6 : released Feb 14, 2012 | |
| 1.4.5 : released May 22, 2011 | |
| 1.4.4 : released May 9, 2011 | |
| 1.4.3 : not released | |
| 1.4.2 : released April 3, 2010 | |
| 1.4.1 : not released | |
| 1.4.0 : not released | |
| 1.3.9 : released September 23, 2009 | |
| 1.3.8 : released August 6, 2009 | |
| 1.3.7 : released July 23, 2009 | |
| 1.3.6 : released July 4, 2009 | |
| 1.3.5 : released June 5, 2009 | |
| 1.3.4 : not released | |
| 1.3.3 : released August 14, 2008 | |
| 1.3.2 : released June 23, 2008 | |
| 1.3.1 : not released | |
| 1.3.0 : released June 3, 2008 | |
| 1.2.12 : released November 25, 2007 | |
| 1.2.11 : released September 6, 2007 | |
| 1.2.10 : not released | |
| 1.2.9 : released June 7, 2007 | |
| 1.2.8 : released December 4, 2006 | |
| 1.2.7 : released April 14, 2006 | |
| 1.2.6 : released March 25, 2006 | |
| 1.2.5 : not released | |
| 1.2.4 : not released | |
| 1.2.3 : not released | |
| 1.2.2 : released October 11, 2005 | |
| 1.2.1 : released August 18, 2005 | |
| 1.2.0 : not released | |
| 1.1.2 : no such version | |
| 1.1.1 : released March 17, 2005 | |
| 1.1.0 : released January 25, 2005 | |
| 1.0.1 : released November 19, 2004 | |
| 1.0.0 : released September 1, 2004 | |
| 0.9.18 : in maintenance | |
| 0.9.17 : released November 25, 2007 | |
| 0.9.16 : released September 6, 2007 | |
| 0.9.15 : not released | |
| 0.9.14 : released June 7, 2007 | |
| 0.9.13 : released December 4, 2006 | |
| 0.9.12 : released April 13, 2006 | |
| 0.9.11 : released March 30, 2006 | |
| 0.9.10 : tagged March 22, 2006, not released | |
| 0.9.9 : tagged January 30, 2006, not released | |
| 0.9.8 : tagged January 27, 2006, not released | |
| 0.9.7 : released October 11, 2005 | |
| 0.9.6 : released February 4, 2005 | |
| 0.9.5 : released November 19, 2004 | |
| 0.9.4 : released September 25, 2003 | |
| 0.9.3 : released April 3, 2003 | |
| 0.9.2 : released March 22, 2003 | |
| 0.9.1 : released September 11, 2002 | |
| 0.9.0 : released August 28, 2002 | |
| Bundled with httpd: | |
| 2.0a9 : released December 12, 2000 | |
| 2.0a8 : released November 20, 2000 | |
| 2.0a7 : released October 8, 2000 | |
| 2.0a6 : released August 18, 2000 | |
| 2.0a5 : released August 4, 2000 | |
| 2.0a4 : released June 7, 2000 | |
| 2.0a3 : released April 28, 2000 | |
| 2.0a2 : released March 31, 2000 | |
| 2.0a1 : released March 10, 2000 | |
| Contributors looking for a mission: | |
| * Just do an egrep on "TODO" or "XXX" in the source. | |
| * Review the bug database at: http://issues.apache.org/bugzilla/ | |
| * Review the "PatchAvailable" bugs in the bug database: | |
| https://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=APR&keywords=PatchAvailable | |
| After testing, you can append a comment saying "Reviewed and tested". | |
| * Open bugs in the bug database. | |
| RELEASE SHOWSTOPPERS: | |
| * apr_file_rotating_* on most platforms | |
| CURRENT VOTES: | |
| CURRENT test/testall -v EXCEPTIONS: | |
| Please add any platform anomilies to the following exception list. | |
| * 'testipsub' will tickle an Solaris 8 getaddrinfo() IPv6 bug, | |
| causing the test to hang. Configure with --disable-ipv6 if | |
| using an unpatched Solaris 8 installation. | |
| * The 'testdso' tests will not work if configured with | |
| --disable-shared since the loadable modules cannot be built. | |
| * 'testdso' fails on older versions of OpenBSD due to dlsym(NULL, | |
| ...) segfaulting. | |
| * Win32 Not Implemented tests | |
| poll: pollcb not implemented | |
| procmutex: lacks fork() support | |
| sock : Sync behavior causes us to skip one test | |
| sockets: tcp6_socket/udp6_socket skipped for no IPv6 adapter | |
| sockopt: TCP isn't corkable | |
| users: username: Groups from apr_uid_get not implemented | |
| * Win32 tests are known to fail when APR_HAVE_IPV6, but there is no | |
| ipv6 adapter is loaded (even loopback is sufficient). There are | |
| obnoxious getaddrinfo() missing results from looking up a fixed | |
| IPv4-IPv6 mixed notation address, which reflect a Win32 bug. | |
| ipsub: One test fails for IPv6 with no IPv6 adapter configured | |
| sock : One test fails for IPv6 with no IPv6 adapter configured | |
| ONGOING REMINDERS FOR STYLE/SUBSTANCE OF CONTRIBUTING TO APR: | |
| * Flush out the test suite and make sure it passes on all platforms. | |
| We currently have about 450 functions in APR and 147 tests. That | |
| means we have a large number of functions that we can't verify are | |
| actually portable. This TODO includes finishing the migration to the | |
| unified test suite, and adding more tests to make the suite | |
| comprehensive. | |
| * Eliminate the TODO's and XXX's by using the doxygen @bug feature | |
| to allow us to better track the open issues, and provide historical | |
| bug lists that help porters understand what was wrong in the old | |
| versions of APR that they would be upgrading from. | |
| * Continue to review, deprecate and eliminate from 2.0 all namespace | |
| un-protected names throughout include/apr_foo.h headers. | |
| RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: | |
| * Implement TOS for linux and solaris and bsd network API's. | |
| The patches below implement only one of these API's, see the | |
| pointer to mod_ftp in this bugzilla incident for hints to offer | |
| all the necessary implementations, for starters. | |
| http://qaix.com/apache-http-server/569-729-patch-add-ip-tos-support-read.shtml | |
| https://issues.apache.org/bugzilla/show_bug.cgi?id=42848 | |
| * Need a proper fragmentation control API for clearing apr_pool's, | |
| where the block alloc/clear/realloc sequence introduces more and | |
| more unusable spaces in the physical blocks. APR must provide | |
| a mechanism to recognize such fragmented conditions, free the | |
| physical pages, and allocate a new single pool block. See also | |
| http://svn.haxx.se/dev/archive-2008-10/0070.shtml | |
| * Implement apr_pool_realloc for consumers such as apr_vformatter, | |
| where the possibility to extend an allocation exists. Given that | |
| an apr function does this, external consumers should be allowed to. | |
| * Need some architecture/OS specific versions of the atomic operations. | |
| progress: generic, solaris Sparc, FreeBSD5, linux, and OS/390 done | |
| need: AIX, AS400, HPUX | |
| * The new lock API is a full replacement for the old API, but is | |
| not yet complete on all platforms. Components that are incomplete | |
| or missing include: | |
| Netware: apr_proc_mutex_*() (Is proc_mutex unnecessary on Netware?) | |
| * proc_mutex is not necessary on NetWare since the OS does | |
| not support processes. The proc_mutex APIs actually | |
| redirect to the thread_mutex APIs. (bnicholes) | |
| OS/2: apr_thread_cond_*(), apr_proc_mutex_*() | |
| Less critical components that we may wish to add at some point: | |
| Beos: apr_thread_rwlock_try*lock() | |
| apr_proc_mutex_trylock() | |
| Unix: apr_thread_rwlock_*() for platforms w/o rwlocks in pthread | |
| * Need to contemplate apr_strftime... platforms vary. OtherBill | |
| suggested this solution (but has no time to implement): | |
| Document our list of 'supported' escapes. | |
| Run some autoconf/m4 magic against the complete list we support. | |
| Move the strftime re-implementation from time/win32 to time/unix. | |
| Add some APR_HAVE_STRFTIME magic to use the system fn, or fail | |
| over to time/unix/strftime.c. | |
| Message-ID: <025e01c1a891$bf41f660$94c0b0d0@v505> | |
| * Using reentrant libraries with non-threaded APR | |
| - Anecdotal evidence exists that suggests it is bad to | |
| mix reentrant and non-reentrant libraries and therefore | |
| we should always use the reentrant versions. | |
| - Unfortunately, on some platforms (AIX 4.2.1) defining | |
| the reentrant flag (-D_THREAD_SAFE) causes builds to fail, | |
| and so one would expect --disable-threads to fix this. | |
| Although this has been fixed for that particular version | |
| of AIX, it may be useful to only enable the reentrant | |
| versions when threads are enabled. | |
| How will we deal with this issue once APR becomes a standalone | |
| library? It is perfectly legitimate to have apps needing | |
| both versions (threaded/reentrant and non-threaded/non-reentrant) | |
| on the same machine. | |
| Wrowe chuckles, uhm, it already is. And seems most have shifted | |
| to shipping threaded builds, of at least apr itself. | |
| * Pools debugging | |
| - Find a way to do check if a pool is used in multiple | |
| threads, while the creation flags say it isn't. IOW, | |
| when the pool was created with APR_POOL_FNEWALLOCATOR, | |
| but without APR_POOL_FLOCK. | |
| Currently, no matter what the creation flags say, we always | |
| create a lock. Without it integrity_check() and | |
| apr_pool_num_bytes() blow up (because they traverse pools | |
| child lists that possibly belong to another thread, in | |
| combination with the pool having no lock). However, | |
| this might actually hide problems like creating a child pool | |
| of a pool belonging to another thread. | |
| Maybe a debug function apr_pool_set_owner(apr_thread_t *) in | |
| combination with extra checks in integrity_check() will point | |
| out these problems. apr_pool_set_owner() would need to be called | |
| everytime the owner(the thread the pool is being used in) of | |
| the pool changes. | |
| - Implement apr_pool_join and apr_pool_lock. Those functions | |
| are noops at the moment. | |
| - Add stats to the pools code. We already have basic stats | |
| in debug mode. Stats that tell us about wasted memory | |
| in the production code require more thought. | |
| Status: Sander Striker is looking into this (low priority) | |
| David says this is a 1.1 issue. | |
| * Get OTHER_CHILD support into Win32 | |
| Status: Bill S. is looking into this | |
| * SysV semaphore support isn't usable by Apache when started as | |
| root because we don't have a way to allow the semaphore to be | |
| used by the configured User and Group. Current work-around: | |
| change the initial permissions to 0666. Needed code: See | |
| 1.3's http_main.c, SysV sem flavor of accept_mutex_init(). | |
| Status: Jim will look into this | |
| Update: Apache deals with this itself, though it might be nice | |
| if APR could do something. | |
| * Build scripts do not recognise AIX 4.2.1 pthreads | |
| Justin says: "Is this still true?" | |
| * FirstBill says we need a new procattr, APR_CREATE_SUSPENDED (or | |
| something similar) to direct ap_create_process to create the | |
| process suspended. We also need a call to wake up the suspended | |
| process. This may not be able to be implemented everywhere though. | |
| Status: OtherBill asks, why? What is the benefit, how is it | |
| portably implemented? Unless this creates some tangible that | |
| mirrors another platform, then I'm -1. | |
| * Replace tables with a proper opaque ADT that has pluggable | |
| implementations (including something like the existing data type, | |
| plus hash tables for speed, with options for more later). | |
| Status: fanf is working on this. | |
| * add a version number to apr_initialize() as an extra failsafe against | |
| (APR) library version skew. | |
| MsgID: <Pine.LNX.4.10.10005231712380.31927-100000@nebula.lyra.org> | |
| Status: Greg -1, Jeff +1, Ryan +1, Tony -0(?), david +1 | |
| * add apr_crypt() and APR_HAS_CRYPT for apps to determine whether the | |
| crypt() function is available, and a way to call it (whether it is | |
| located in libc, libcrypt, or libufc) | |
| Justin says: Should apr_crypt() be in apr-util? | |
| Wrowe answers: of course! It's called openssl DES_fcrypt ;-) | |
| * use os_(un)cork in network_io/unix/sendrecv.c for FreeBSD's | |
| sendfile implementation. | |
| david: The socket options stuff is now in and using it should | |
| reduce the number of syscalls that are required for | |
| os_cork and uncork, so the code should be reviewed to | |
| make use of the new calls. If no-one beats me to it I'll | |
| get around to it soonish... | |
| * toss the per-Makefile setup of INCLUDES; shift to rules.mk.in | |
| rbb: This is a bad thing IMHO. If we do this, then we | |
| can't use these makefiles for anything else. For example, | |
| apr-util | |
| * add the rest of the pool accessor declare/impl macros. | |
| Justin says: Both thread and file have the accessors now. Any others? | |
| Status: Greg volunteers | |
| * I think apr_open_stderr() and friends *should* dup() the | |
| descriptor. That would allow the new/returned file to be closed | |
| (via pool cleanup or manually) without accidentally closing | |
| stderr/out. | |
| wrowe: votes -1, reasons directly manipulate this through APR | |
| * need to export (in code, not just build scripts) the shared | |
| library extension (e.g. ".so") for the platform. clients need to | |
| use this to construct filenames to pass to apr_dso_load() | |
| -- note on Win32 we distinguish 'apache module' names from other | |
| 'loadable module' names, so be careful with Apache's directive. | |
| AIX, HPUX may use similar (.so for a 'module's name while the | |
| defaults .a or .sl are used for libs.) | |
| * Possible gmtime_r replacement in explode_time | |
| On Solaris (and possibly others), the gmtime_r libc function obtains | |
| a mutex. We have seen 21/25 threads being blocked in this mutex on | |
| a threaded httpd MPM when requesting static pages. It may be worth | |
| it to hand optimize this since there is no real need for a mutex at | |
| the system level (straight arithmetic from what I can tell). If you | |
| have access to the Solaris source code: | |
| osnet_volume/usr/src/lib/libc/port/gen/time_comm.c. | |
| * Add a way to query APR for what features it has at runtime (i.e. | |
| threads). | |
| Justin says: I'm not completely sold on this, but it has been mentioned | |
| before and at least added to STATUS. | |
| * apr_xlate.h generates a bunch of compiler warnings. | |
| Jeff asks: which platform? | |
| Justin says: Solaris with Forte 6.1. | |
| * fcntl() oddness on Solaris. Under high loads, fcntl() decides to | |
| return error code 46 (ENOLCK). | |
| httpd (prefork MPM) error log says (predictably): | |
| (46)No record locks available: couldn't grab the accept mutex | |
| All of the children report this and subsequently exits. httpd is now | |
| hosed. AFAICT, this does not look to be an out-of-fds error. | |
| Solaris's man page says: | |
| ENOLCK | |
| The cmd argument is F_SETLK, F_SETLK64, F_SETLKW, or | |
| F_SETLKW64 and satisfying the lock or unlock request | |
| would result in the number of locked regions in the | |
| system exceeding a system-imposed limit. | |
| Justin says: What is this system-imposed limit and how do we change it? | |
| This gives me more rationale for switching the default | |
| interprocess lock mechanism to pthread (if available). | |
| Explanation (from Kristofer Spinka <kspinka@style.net>): | |
| ============ | |
| The system imposed default limit of outstanding lock requests is | |
| 512. | |
| You can verify this by, in a contemporary version of Solaris: | |
| # mdb -k | |
| > tune_t_flckrec/D | |
| tune_t_flckrec: | |
| tune_t_flckrec: 512 | |
| This can be increased by adding the following to /etc/system: | |
| set tune_t_flckrec=1024 | |
| and rebooting. | |
| Of course "1024" can be any reasonable limit, although we do not know | |
| what "reasonable" should be, so be conservative, only increase this as | |
| necessary. | |
| * There are some optimizations that can be done to the new | |
| apr_proc_*() functions (on UNIX). One that may reduce pointer | |
| indirection would be to make the apr_proc_mutex_unix_lock_methods_t | |
| first-class members of the apr_proc_mutex_t structure. | |
| * Condition variables are tricky enough to use, and even trickier | |
| to implement properly. We could really use a better test case | |
| for those subtle quirks that sometimes creep into CV implementations. | |
| * Once we are fully satisfied with the new lock API, we can | |
| begin to migrate the old API to be implemented on top of the | |
| new one, or just decide to get rid of it altogether. | |
| * FreeBSD returns 45 (EOPNOTSUPP) when the lockfile is on a NFS | |
| partition when you call fcntl(F_SETLKW). It may be good if we | |
| can somehow detect this and error out when creating the lock | |
| rather than waiting for the error to occur when acquiring lock. | |
| * Fix autoconf tests for strerror_r on BeOS and remove the hack in | |
| misc/unix/errorcodes.c to get error reporting working. Committed as | |
| the solution is elusive at present. | |
| * implement APR_PROGRAM_ENV and APR_PROGRAM_PATH on BeOS, OS/2, Netware | |
| * stat() on a few platforms (notably Solaris and AIX) succeeds for | |
| a non-directory even if a trailing '/' was specified in the | |
| name. APR should perhaps simulate the normal -1/ENOTDIR | |
| behavior in APR routines which retrieve information about the | |
| file. Note: Win2K fails GetFileAttributesEx in this scenario. | |
| See OtherBill's comments in this message to dev@httpd.apache.org: | |
| Message-Id: <5.1.0.14.2.20020315080852.00bce168@localhost> | |
| * Identify and implement those protection bits that have general | |
| usefulness, perhaps hidden, generic read-only [immutable], | |
| effective current user permissions, etc. | |
| * dso getsym implementation are becoming very strict about returning | |
| a fn pointer v.s. a data pointer, this should be split in apr_dso. | |
| Interface Changes Postponed for APR 2.0: | |
| * apr_proc_other_child_register()'s write_fd argument should be removed | |
| or made used. The comment in the API previously said: | |
| write_fd duplicates the proc->out stream, it's really | |
| redundant and should be replaced in the APR 1.0 API with a | |
| bitflag of which proc->in/out/err handles should be health | |
| checked. no platform currently tests the pipes health. | |
| * apr_atomic_casptr() has the volatile qualifier in the wrong | |
| place: should take "pointer to volatile pointer to void", not | |
| "pointer to pointer to volatile void". | |
| * apr_socket_sendfile(): the offset parameter should not be | |
| pass-by-reference, or it should be updated to do something | |
| useful. | |
| * apr_password_get(): the bufsize parameter should not be | |
| pass-by-reference. | |
| * apr_allocator.h: apr_memnode_t's use of uint32_t's doesn't match | |
| well with allocation sizes being apr_size_t, possibly this can | |
| be improved by using apr_size_t throughout. | |
| * apr_hash_count() should take a const apr_hash_t * argument. | |
| * apr_ino_t should be an ino64_t in LFS builds. | |
| * possible type renames: | |
| apr_file_info_t from apr_finfo_t | |
| apr_file_attrs_t from apr_fileattrs_t | |
| apr_file_seek_where_t from apr_seek_where_t | |
| apr_lock_mech_e from apr_lockmech_e | |
| apr_time_interval_t from apr_interval_time_t | |
| apr_time_interval_short_t from apr_short_interval_time_t | |
| * wrowe writes: | |
| Looking at bug 32520, it occurs to me that exploding times using the | |
| apr_time_exp_* functions; it would make more sense to split ->tm_usec into | |
| ->tm_msec thousandths (milleseconds) | |
| ->tm_usec millionths (microseconds) | |
| for most display purposes. It's trivial to roll them together with the | |
| format string %03d%03d if that's what's desired, or display simply | |
| %02d.%03d if millisecond resolution is desired. It would also shrink | |
| the fields to int's so unpacking would be slightly slower, using them | |
| would be slightly faster, for what's likely to be little impact on | |
| performance. | |
| * The other-child API doesn't allow the apr_exit_why_e to be passed to the | |
| application's maintenance function. The expected usage is that the | |
| application calls apr_proc_wait[_all_procs]() and is given back | |
| apr_exit_why_e and exit_code_or_signal_num, thus losing the original | |
| (on Unix, at least) representation which held both pieces of information | |
| in an int. Both pieces of data should be available to the maintenance | |
| function so that it has the opportunity to take different actions. An | |
| example would be to issue messages about probable misconfiguration when | |
| receiving a certain exit code and trying to restart otherwise. Thus, | |
| apr_proc_other_child_alert() should take an additional apr_exit_why_e | |
| parameter, as should the application-provided maintenance function. The | |
| exit-why value would be ignored in the same circumstances as the existing | |
| status parameter: reason != APR_OC_REASON_DEATH. | |
| * apr_file_gets() should take an apr_size_t size parameter? | |
| * apr_table_vdo should not continue iterating through the keys | |
| list once the callback function returns non-zero; see JCW's | |
| comment in apr_tables.c. | |
| * The library SONAME should vary for the different library ABIs - | |
| i.e. LFS support, IPv6 support or not. | |
| * remove APR_POLL_LASTDESC from apr_datatype_e. | |
| * Almost every API in APR depends on pools, but pool semantics | |
| aren't a good match for a lot of applications. We need to find | |
| a way to support alternate allocators polymorphically without | |
| a significant performance penalty. | |
| * apr_global_mutex_child_init and apr_proc_mutex_child_init aren't | |
| portable. There are a variety of problems with the locking API when it | |
| is used with apr_create_proc instead of apr_fork. First, _child_init | |
| doesn't take a lockmech_e parameter so it causes a segfault after the | |
| apr_proc_create, because the proc_mutex field hasn't been initialized. | |
| When the lockmech_e parameter is added, it _still_ doesn't work, because | |
| some lock mechanisms expect to inherit from the parent process. For | |
| example, sys V semaphores don't have a file to open, so the child process | |
| can't reaquire the lock. | |
| jerenkrantz says: This is not a showstopper and I believe the above | |
| analysis is slightly confusing. The real problem here is that | |
| apr_*_mutex_child_init assumes a shared memory space - that is, the | |
| children processes have access to the parent apr_*_mutex_t pointer. The | |
| children just call child_init on the original, inherited apr_*_mutex_t. | |
| Unlike globalmutexchild in test, apr_*_mutex_create is *not* intended to | |
| be called from the child and subsequently call child_init. Instead, | |
| apr_create_proc is intended to exec separate processes with disjoint | |
| memory addresses. Currently, APR does not provide a cross-platform | |
| mechanism for joining an already existing lock. A simple | |
| 'apr_*_mutex_join' which is intended to be called from separate | |
| processes to an already-existing lock would solve this problem. | |
| child_init is not intended to be used this way. Even with SysV | |
| semaphores, using IPC_PRIVATE should still work due to the parent-child | |
| relationship. A strawman has been posted to dev@apr: | |
| Message-Id: <213031CF0406DE1AC426A411@[10.0.1.137]> | |
| * The return type of a thread function (void *) is inconsistent with | |
| the type used in apr_thread_exit()/apr_thread_join() (apr_status_t). | |
| The thread function's return type should be changed to apr_status_t | |
| so that a return from the thread main function has the same effect | |
| as apr_thread_exit(). | |
| See Message-Id: <E16JjZA-0007hg-00@zakath.apana.org.au> for thread | |
| discussing this. | |
| +1: BrianH, Aaron, david, jerenkrantz | |
| Status: Deferred to 2.0.0 (API change) | |