> PS. Hiroyuki, could you send me your httpd-2.0/srclib/apr/apr.exports > please? I'm curious if my thoughts are matching the behaviour on > your machine.
apr.exports and apr.exports.patched are attached in this mail. the former is created from apr_sms_threads.h rev 1.1 and the latter from that after applying my patch. The diff is very simple as follows. --- apr.exports Fri Jul 13 23:36:11 2001 +++ apr.exports.patched Fri Jul 13 23:35:04 2001 @@ -262,8 +262,10 @@ apr_sms_dump_stats /APR_SMS_ALLOC_STATS apr_sms_blocks_create -apr_sms_threads_create -apr_sms_threads_create_ex +APR_HAS_THREADS + apr_sms_threads_create + apr_sms_threads_create_ex +/APR_HAS_THREADS apr_sms_tracking_create apr_sms_trivial_create apr_sms_trivial_create_ex My system is FreeBSD-current which is built a few days before. /usr/bin/awk is gawk 3.0.6; same as Sander's. cheers, hiro hanai
APR_HAS_DSO apr_dso_load apr_dso_unload apr_dso_sym apr_dso_error /APR_HAS_DSO apr_strerror apr_stat apr_lstat apr_dir_open apr_dir_close apr_dir_read apr_dir_rewind apr_filepath_root apr_filepath_merge apr_filepath_get apr_filepath_set apr_file_open apr_file_close apr_file_remove apr_file_rename apr_file_eof apr_file_open_stderr apr_file_open_stdout apr_file_open_stdin apr_file_read apr_file_write apr_file_writev apr_file_read_full apr_file_write_full apr_file_putc apr_file_getc apr_file_ungetc apr_file_gets apr_file_puts apr_file_flush apr_file_dup apr_file_seek apr_file_pipe_create apr_file_namedpipe_create apr_file_pipe_timeout_get apr_file_pipe_timeout_set apr_file_lock apr_file_unlock apr_file_name_get apr_file_data_get apr_file_data_set apr_file_printf apr_file_perms_set apr_dir_make apr_dir_remove apr_file_info_get apr_file_trunc apr_fnmatch apr_is_fnmatch strcasecmp strncasecmp memchr APR_HAS_RANDOM apr_generate_random_bytes /APR_HAS_RANDOM apr_initialize apr_terminate apr_terminate2 apr_getopt_init apr_getopt apr_getopt_long apr_hash_make apr_hash_set apr_hash_get apr_hash_first apr_hash_next apr_hash_this apr_hash_count apr_filename_of_pathname apr_vformatter apr_password_validate apr_password_get apr_lock_create apr_lock_acquire apr_lock_acquire_rw apr_lock_release apr_lock_destroy apr_lock_child_init apr_lock_data_get apr_lock_data_set APR_HAS_LOCK_CREATE_NP apr_lock_create_np /APR_HAS_LOCK_CREATE_NP apr_md5_init APR_HAS_XLATE apr_md5_set_xlate /APR_HAS_XLATE apr_md5_update apr_md5_final apr_md5 apr_md5_encode APR_HAS_MMAP apr_mmap_create apr_mmap_delete apr_mmap_offset /APR_HAS_MMAP apr_socket_create apr_shutdown apr_socket_close apr_bind apr_listen apr_accept apr_connect apr_sockaddr_info_get apr_getnameinfo apr_parse_addr_port apr_gethostname apr_socket_data_get apr_socket_data_set apr_send apr_sendv apr_sendto apr_recvfrom APR_HAS_SENDFILE apr_sendfile /APR_HAS_SENDFILE apr_recv apr_setsocketopt apr_getsocketopt apr_socket_addr_get apr_sockaddr_port_set apr_sockaddr_port_get apr_sockaddr_ip_set apr_sockaddr_ip_get apr_poll_setup apr_poll apr_poll_socket_add apr_poll_socket_mask apr_poll_socket_remove apr_poll_socket_clear apr_poll_revents_get apr_poll_data_get apr_poll_data_set APR_FILES_AS_SOCKETS apr_socket_from_file /APR_FILES_AS_SOCKETS apr_getservbyname apr_ipsubnet_create apr_ipsubnet_test APR_OS_ACCEPT_FILTER apr_socket_accept_filter /APR_OS_ACCEPT_FILTER defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_join apr_find_pool apr_pool_num_bytes apr_pool_free_blocks_num_bytes /defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_is_ancestor apr_pool_alloc_init apr_pool_alloc_term apr_pool_create !defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_set_abort apr_pool_get_abort apr_pool_get_parent apr_pool_userdata_set apr_pool_userdata_get apr_pool_clear apr_pool_destroy apr_palloc apr_pcalloc /!defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_sub_make defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_num_bytes apr_pool_free_blocks_num_bytes /defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_cleanup_register !defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_cleanup_kill apr_pool_cleanup_run apr_pool_cleanup_null /!defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_cleanup_for_exec APR_POOLS_ARE_SMS /APR_POOLS_ARE_SMS apr_os_file_get apr_os_dir_get apr_os_sock_get apr_os_lock_get apr_os_exp_time_get apr_os_imp_time_get APR_HAS_THREADS apr_os_thread_get apr_os_threadkey_get /APR_HAS_THREADS apr_os_file_put apr_os_dir_put apr_os_sock_put apr_os_sock_make apr_os_lock_put apr_os_imp_time_put apr_os_exp_time_put APR_HAS_THREADS apr_os_thread_put apr_os_threadkey_put /APR_HAS_THREADS APR_HAS_DSO apr_os_dso_handle_put apr_os_dso_handle_get /APR_HAS_DSO APR_HAS_THREADS apr_os_thread_current apr_os_thread_equal apr_sms_thread_register apr_sms_thread_unregister /APR_HAS_THREADS apr_shm_init apr_shm_destroy apr_shm_malloc apr_shm_calloc apr_shm_free apr_shm_name_get apr_shm_name_set apr_shm_open apr_shm_avail APR_HAVE_SIGACTION apr_signal defined(SIG_IGN) && !defined(SIG_ERR) /defined(SIG_IGN) && !defined(SIG_ERR) /APR_HAVE_SIGACTION apr_signal_get_description apr_signal_init apr_sms_malloc apr_sms_calloc apr_sms_realloc apr_sms_free APR_ASSERT_MEMORY apr_sms_assert /APR_ASSERT_MEMORY apr_sms_reset apr_sms_destroy apr_sms_lock apr_sms_unlock apr_sms_is_ancestor apr_sms_get_identity apr_sms_get_parent apr_sms_set_abort apr_sms_get_abort apr_sms_userdata_set apr_sms_userdata_get apr_sms_cleanup_register apr_sms_cleanup_unregister apr_sms_cleanup_unregister_type apr_sms_cleanup_run apr_sms_cleanup_run_type apr_sms_std_create APR_DEBUG_SHOW_STRUCTURE apr_sms_show_structure /APR_DEBUG_SHOW_STRUCTURE APR_DEBUG_TAG_SMS apr_sms_tag /APR_DEBUG_TAG_SMS APR_SMS_ALLOC_STATS apr_sms_dump_stats /APR_SMS_ALLOC_STATS apr_sms_blocks_create apr_sms_threads_create apr_sms_threads_create_ex apr_sms_tracking_create apr_sms_trivial_create apr_sms_trivial_create_ex apr_strnatcmp apr_strnatcasecmp apr_pstrdup apr_pstrndup apr_pmemdup apr_pstrcat apr_pvsprintf apr_psprintf apr_cpystrn apr_collapse_spaces apr_tokenize_to_argv apr_strtok apr_snprintf apr_vsnprintf apr_array_make apr_array_push apr_array_cat apr_array_copy apr_array_copy_hdr apr_array_append apr_array_pstrcat apr_table_make apr_table_copy apr_table_clear apr_table_get apr_table_set apr_table_setn apr_table_unset apr_table_merge apr_table_mergen apr_table_add apr_table_addn apr_table_overlay apr_table_do apr_table_vdo apr_table_overlap APR_HAS_THREADS apr_threadattr_create apr_threadattr_detach_set apr_threadattr_detach_get apr_thread_create apr_thread_exit apr_thread_join apr_thread_detach apr_thread_data_get apr_thread_data_set apr_threadkey_private_create apr_threadkey_private_get apr_threadkey_private_set apr_threadkey_private_delete apr_threadkey_data_get apr_threadkey_data_set /APR_HAS_THREADS apr_procattr_create apr_procattr_io_set apr_procattr_child_in_set apr_procattr_child_out_set apr_procattr_child_err_set apr_procattr_dir_set apr_procattr_cmdtype_set apr_procattr_detach_set APR_HAVE_STRUCT_RLIMIT apr_procattr_limit_set /APR_HAVE_STRUCT_RLIMIT APR_HAS_FORK apr_proc_fork /APR_HAS_FORK apr_proc_create apr_proc_wait apr_proc_wait_all_procs apr_proc_detach APR_HAS_OTHER_CHILD apr_proc_other_child_register apr_proc_other_child_unregister apr_proc_other_child_read apr_proc_other_child_check /APR_HAS_OTHER_CHILD apr_proc_kill apr_pool_note_subprocess APR_HAS_THREADS && !defined(OS2) && APR_HAVE_SIGWAIT apr_setup_signal_thread apr_signal_thread /APR_HAS_THREADS && !defined(OS2) && APR_HAVE_SIGWAIT apr_time_now apr_ansi_time_to_apr_time apr_explode_time apr_explode_gmt apr_explode_localtime apr_implode_time apr_implode_gmt apr_sleep apr_rfc822_date apr_ctime apr_strftime APR_HAS_USER apr_get_username apr_get_userid apr_get_home_directory defined(WIN32) apr_compare_users /defined(WIN32) apr_get_groupname defined(WIN32) apr_compare_groups /defined(WIN32) apr_get_user_passwd /APR_HAS_USER apr_uuid_get apr_uuid_format apr_uuid_parse APR_HAS_XLATE apr_xlate_open apr_xlate_get_sb apr_xlate_conv_buffer APR_NOT_DONE_YET apr_xlate_conv_char /APR_NOT_DONE_YET apr_xlate_close /APR_HAS_XLATE
APR_HAS_DSO apr_dso_load apr_dso_unload apr_dso_sym apr_dso_error /APR_HAS_DSO apr_strerror apr_stat apr_lstat apr_dir_open apr_dir_close apr_dir_read apr_dir_rewind apr_filepath_root apr_filepath_merge apr_filepath_get apr_filepath_set apr_file_open apr_file_close apr_file_remove apr_file_rename apr_file_eof apr_file_open_stderr apr_file_open_stdout apr_file_open_stdin apr_file_read apr_file_write apr_file_writev apr_file_read_full apr_file_write_full apr_file_putc apr_file_getc apr_file_ungetc apr_file_gets apr_file_puts apr_file_flush apr_file_dup apr_file_seek apr_file_pipe_create apr_file_namedpipe_create apr_file_pipe_timeout_get apr_file_pipe_timeout_set apr_file_lock apr_file_unlock apr_file_name_get apr_file_data_get apr_file_data_set apr_file_printf apr_file_perms_set apr_dir_make apr_dir_remove apr_file_info_get apr_file_trunc apr_fnmatch apr_is_fnmatch strcasecmp strncasecmp memchr APR_HAS_RANDOM apr_generate_random_bytes /APR_HAS_RANDOM apr_initialize apr_terminate apr_terminate2 apr_getopt_init apr_getopt apr_getopt_long apr_hash_make apr_hash_set apr_hash_get apr_hash_first apr_hash_next apr_hash_this apr_hash_count apr_filename_of_pathname apr_vformatter apr_password_validate apr_password_get apr_lock_create apr_lock_acquire apr_lock_acquire_rw apr_lock_release apr_lock_destroy apr_lock_child_init apr_lock_data_get apr_lock_data_set APR_HAS_LOCK_CREATE_NP apr_lock_create_np /APR_HAS_LOCK_CREATE_NP apr_md5_init APR_HAS_XLATE apr_md5_set_xlate /APR_HAS_XLATE apr_md5_update apr_md5_final apr_md5 apr_md5_encode APR_HAS_MMAP apr_mmap_create apr_mmap_delete apr_mmap_offset /APR_HAS_MMAP apr_socket_create apr_shutdown apr_socket_close apr_bind apr_listen apr_accept apr_connect apr_sockaddr_info_get apr_getnameinfo apr_parse_addr_port apr_gethostname apr_socket_data_get apr_socket_data_set apr_send apr_sendv apr_sendto apr_recvfrom APR_HAS_SENDFILE apr_sendfile /APR_HAS_SENDFILE apr_recv apr_setsocketopt apr_getsocketopt apr_socket_addr_get apr_sockaddr_port_set apr_sockaddr_port_get apr_sockaddr_ip_set apr_sockaddr_ip_get apr_poll_setup apr_poll apr_poll_socket_add apr_poll_socket_mask apr_poll_socket_remove apr_poll_socket_clear apr_poll_revents_get apr_poll_data_get apr_poll_data_set APR_FILES_AS_SOCKETS apr_socket_from_file /APR_FILES_AS_SOCKETS apr_getservbyname apr_ipsubnet_create apr_ipsubnet_test APR_OS_ACCEPT_FILTER apr_socket_accept_filter /APR_OS_ACCEPT_FILTER defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_join apr_find_pool apr_pool_num_bytes apr_pool_free_blocks_num_bytes /defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_is_ancestor apr_pool_alloc_init apr_pool_alloc_term apr_pool_create !defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_set_abort apr_pool_get_abort apr_pool_get_parent apr_pool_userdata_set apr_pool_userdata_get apr_pool_clear apr_pool_destroy apr_palloc apr_pcalloc /!defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_sub_make defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_num_bytes apr_pool_free_blocks_num_bytes /defined(APR_POOL_DEBUG) || defined(DOXYGEN) apr_pool_cleanup_register !defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_cleanup_kill apr_pool_cleanup_run apr_pool_cleanup_null /!defined(APR_POOLS_ARE_SMS) || defined(DOXYGEN) apr_pool_cleanup_for_exec APR_POOLS_ARE_SMS /APR_POOLS_ARE_SMS apr_os_file_get apr_os_dir_get apr_os_sock_get apr_os_lock_get apr_os_exp_time_get apr_os_imp_time_get APR_HAS_THREADS apr_os_thread_get apr_os_threadkey_get /APR_HAS_THREADS apr_os_file_put apr_os_dir_put apr_os_sock_put apr_os_sock_make apr_os_lock_put apr_os_imp_time_put apr_os_exp_time_put APR_HAS_THREADS apr_os_thread_put apr_os_threadkey_put /APR_HAS_THREADS APR_HAS_DSO apr_os_dso_handle_put apr_os_dso_handle_get /APR_HAS_DSO APR_HAS_THREADS apr_os_thread_current apr_os_thread_equal apr_sms_thread_register apr_sms_thread_unregister /APR_HAS_THREADS apr_shm_init apr_shm_destroy apr_shm_malloc apr_shm_calloc apr_shm_free apr_shm_name_get apr_shm_name_set apr_shm_open apr_shm_avail APR_HAVE_SIGACTION apr_signal defined(SIG_IGN) && !defined(SIG_ERR) /defined(SIG_IGN) && !defined(SIG_ERR) /APR_HAVE_SIGACTION apr_signal_get_description apr_signal_init apr_sms_malloc apr_sms_calloc apr_sms_realloc apr_sms_free APR_ASSERT_MEMORY apr_sms_assert /APR_ASSERT_MEMORY apr_sms_reset apr_sms_destroy apr_sms_lock apr_sms_unlock apr_sms_is_ancestor apr_sms_get_identity apr_sms_get_parent apr_sms_set_abort apr_sms_get_abort apr_sms_userdata_set apr_sms_userdata_get apr_sms_cleanup_register apr_sms_cleanup_unregister apr_sms_cleanup_unregister_type apr_sms_cleanup_run apr_sms_cleanup_run_type apr_sms_std_create APR_DEBUG_SHOW_STRUCTURE apr_sms_show_structure /APR_DEBUG_SHOW_STRUCTURE APR_DEBUG_TAG_SMS apr_sms_tag /APR_DEBUG_TAG_SMS APR_SMS_ALLOC_STATS apr_sms_dump_stats /APR_SMS_ALLOC_STATS apr_sms_blocks_create APR_HAS_THREADS apr_sms_threads_create apr_sms_threads_create_ex /APR_HAS_THREADS apr_sms_tracking_create apr_sms_trivial_create apr_sms_trivial_create_ex apr_strnatcmp apr_strnatcasecmp apr_pstrdup apr_pstrndup apr_pmemdup apr_pstrcat apr_pvsprintf apr_psprintf apr_cpystrn apr_collapse_spaces apr_tokenize_to_argv apr_strtok apr_snprintf apr_vsnprintf apr_array_make apr_array_push apr_array_cat apr_array_copy apr_array_copy_hdr apr_array_append apr_array_pstrcat apr_table_make apr_table_copy apr_table_clear apr_table_get apr_table_set apr_table_setn apr_table_unset apr_table_merge apr_table_mergen apr_table_add apr_table_addn apr_table_overlay apr_table_do apr_table_vdo apr_table_overlap APR_HAS_THREADS apr_threadattr_create apr_threadattr_detach_set apr_threadattr_detach_get apr_thread_create apr_thread_exit apr_thread_join apr_thread_detach apr_thread_data_get apr_thread_data_set apr_threadkey_private_create apr_threadkey_private_get apr_threadkey_private_set apr_threadkey_private_delete apr_threadkey_data_get apr_threadkey_data_set /APR_HAS_THREADS apr_procattr_create apr_procattr_io_set apr_procattr_child_in_set apr_procattr_child_out_set apr_procattr_child_err_set apr_procattr_dir_set apr_procattr_cmdtype_set apr_procattr_detach_set APR_HAVE_STRUCT_RLIMIT apr_procattr_limit_set /APR_HAVE_STRUCT_RLIMIT APR_HAS_FORK apr_proc_fork /APR_HAS_FORK apr_proc_create apr_proc_wait apr_proc_wait_all_procs apr_proc_detach APR_HAS_OTHER_CHILD apr_proc_other_child_register apr_proc_other_child_unregister apr_proc_other_child_read apr_proc_other_child_check /APR_HAS_OTHER_CHILD apr_proc_kill apr_pool_note_subprocess APR_HAS_THREADS && !defined(OS2) && APR_HAVE_SIGWAIT apr_setup_signal_thread apr_signal_thread /APR_HAS_THREADS && !defined(OS2) && APR_HAVE_SIGWAIT apr_time_now apr_ansi_time_to_apr_time apr_explode_time apr_explode_gmt apr_explode_localtime apr_implode_time apr_implode_gmt apr_sleep apr_rfc822_date apr_ctime apr_strftime APR_HAS_USER apr_get_username apr_get_userid apr_get_home_directory defined(WIN32) apr_compare_users /defined(WIN32) apr_get_groupname defined(WIN32) apr_compare_groups /defined(WIN32) apr_get_user_passwd /APR_HAS_USER apr_uuid_get apr_uuid_format apr_uuid_parse APR_HAS_XLATE apr_xlate_open apr_xlate_get_sb apr_xlate_conv_buffer APR_NOT_DONE_YET apr_xlate_conv_char /APR_NOT_DONE_YET apr_xlate_close /APR_HAS_XLATE