[ace-bugs] SEGV when calling ACE_SSL_SOCK_Acceptor.accept() with timeout and FD_SETSIZE exceeded

Johnny Willemsen jwillemsen at remedy.nl
Mon Jun 29 07:02:13 CDT 2020


Hi,

Thanks for using the PRF form, for the future I would recommend that you
include ace/config-linux.h in your ace/config.h file and refer to that
file without pasting its content

Could you extend one of the unit tests under ACE_wrappers/tests for this
and open a PR with the test extension and suggested fix on github at
https://github.com/DOCGroup/ACE_TAO, see
https://github.com/DOCGroup/ACE_TAO/pull/1044 for another PR which I
think is related.

Johnny Willemsen
Remedy IT
http://www.remedy.nl

On 2020-06-29 11:38, Romana, Sergio wrote:
>
>  
>
>     ACE VERSION: 6.5.0  (same results with 6.5.9)
>
>  
>
>     HOST MACHINE and OPERATING SYSTEM:
>
>         Red Hat Enterprise Linux Server release 7.7 (Maipo)
>
>         3.10.0-1062.1.2.el7.x86_64
>
>  
>
>     TARGET MACHINE and OPERATING SYSTEM, if different from HOST:
>
>  
>
>     COMPILER NAME AND VERSION (AND PATCHLEVEL):
>
>          gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
>
>  
>
>     THE $ACE_ROOT/ace/config.h FILE:
>
> // -*- C++ -*-
>
> // The following configuration file is designed to work for Linux
>
> // platforms using GNU C++.
>
>  
>
> #ifndef ACE_CONFIG_LINUX_H
>
> #define ACE_CONFIG_LINUX_H
>
> #include /**/ "ace/pre.h"
>
>  
>
> #if !defined (ACE_LINUX)
>
> #define ACE_LINUX
>
> #endif /* ACE_LINUX */
>
>  
>
> #if !defined (ACE_MT_SAFE)
>
> #  define ACE_MT_SAFE 1
>
> #endif
>
>  
>
> #if !defined (__ACE_INLINE__)
>
> #  define __ACE_INLINE__
>
> #endif /* ! __ACE_INLINE__ */
>
>  
>
> #if !defined (ACE_PLATFORM_CONFIG)
>
> #define ACE_PLATFORM_CONFIG config-linux.h
>
> #endif
>
>  
>
> #define ACE_HAS_BYTESEX_H
>
>  
>
> // Needed to differentiate between libc 5 and libc 6 (aka glibc).
>
> #include <features.h>
>
>  
>
> #if (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)
>
> #  define ACE_HAS_PTHREADS_UNIX98_EXT
>
> #endif /* _XOPEN_SOURCE - 0 >= 500 */
>
>  
>
> # include "ace/config-posix.h"
>
>  
>
> #if !defined (ACE_LACKS_LINUX_NPTL)
>
>  
>
>   // Temporary fix because NPTL kernels do have shm_open but there is
> a problem
>
>   // with shm_open/shm_unlink pairing in ACE which needs to be fixed
> when I have time.
>
> # if defined (ACE_HAS_SHM_OPEN)
>
> #   undef ACE_HAS_SHM_OPEN
>
> # endif /* ACE_HAS_SHM_OPEN */
>
>  
>
> # if defined (ACE_USES_FIFO_SEM)
>
>     // Don't use this for Linux NPTL since this has complete
>
>     // POSIX semaphores which are more efficient
>
> #   undef ACE_USES_FIFO_SEM
>
> # endif /* ACE_USES_FIFO_SEM */
>
>  
>
> # if defined (ACE_HAS_POSIX_SEM)
>
>     // Linux NPTL may not define the right POSIX macro
>
>     // but they have the actual runtime support for this stuff
>
> #   if !defined (ACE_HAS_POSIX_SEM_TIMEOUT) && (((_POSIX_C_SOURCE - 0)
> >= 200112L) || (_XOPEN_SOURCE >= 600))
>
> #     define ACE_HAS_POSIX_SEM_TIMEOUT
>
> #   endif /* !ACE_HAS_POSIX_SEM_TIMEOUT && (((_POSIX_C_SOURCE - 0) >=
> 200112L) || (_XOPEN_SOURCE >= 600)) */
>
> # endif /* ACE_HAS_POSIX_SEM */
>
> #endif /* !ACE_LACKS_LINUX_NPTL */
>
>  
>
> // AIO support pulls in the rt library, which pulls in the pthread
>
> // library.  Disable AIO in single-threaded builds.
>
> #if defined (ACE_HAS_THREADS)
>
> #  define ACE_HAS_CLOCK_GETTIME
>
> #  define ACE_HAS_CLOCK_SETTIME
>
> #else
>
> #  undef ACE_HAS_AIO_CALLS
>
> #endif
>
>  
>
> // First the machine specific part
>
>  
>
> #if defined (__powerpc__) || defined (__x86_64__)
>
> # if !defined (ACE_DEFAULT_BASE_ADDR)
>
> #   define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char* >(0x40000000))
>
> # endif /* ! ACE_DEFAULT_BASE_ADDR */
>
> #elif defined (__ia64)
>
> # if !defined (ACE_DEFAULT_BASE_ADDR)
>
> // Zero base address should work fine for Linux of IA-64: it just lets
>
> // the kernel to choose the right value.
>
> #   define ACE_DEFAULT_BASE_ADDR (reinterpret_cast<
> char*>(0x0000000000000000))
>
> # endif /* ! ACE_DEFAULT_BASE_ADDR */
>
> #endif /* ! __powerpc__  && ! __ia64 */
>
>  
>
> // Then glibc/libc5 specific parts
>
>  
>
> #if defined(__GLIBC__) || defined (__INTEL_COMPILER)
>
> # if !defined (__INTEL_COMPILER) && \
>
>     (__GLIBC__  < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 3)
>
> #   define ACE_HAS_RUSAGE_WHO_ENUM enum __rusage_who
>
> #   define ACE_HAS_RLIMIT_RESOURCE_ENUM enum __rlimit_resource
>
> #   define ACE_LACKS_ISCTYPE
>
> # endif
>
> # define ACE_HAS_SOCKLEN_T
>
> # define ACE_HAS_4_4BSD_SENDMSG_RECVMSG
>
>  
>
>   // glibc defines both of these, used in OS_String.
>
> # if defined (_GNU_SOURCE)
>
> #   define ACE_HAS_STRNLEN
>
> #   define ACE_HAS_WCSNLEN
>
>  
>
>   // This is probably not a 100%-sure-fire check... Red Hat Linux 9
>
>   // and Enterprise Linux 3 and up have a new kernel that can send signals
>
>   // across threads. This was not possible prior because there was no real
>
>   // difference between a process and a thread. With this, the
>
>   // ACE_POSIX_SIG_Proactor is the only chance of getting asynch I/O
> working.
>
>   // There are restrictions, such as all socket operations being silently
>
>   // converted to synchronous by the kernel, that make aio a non-starter
>
>   // for most Linux platforms at this time. But we'll start to crawl...
>
> #   define ACE_POSIX_SIG_PROACTOR
>
> # endif
>
>  
>
>   // To avoid the strangeness with Linux's ::select (), which modifies
>
>   // its timeout argument, use ::poll () instead.
>
> # define ACE_HAS_POLL
>
>  
>
> # define ACE_HAS_SIGINFO_T
>
> # define ACE_LACKS_SIGINFO_H
>
> # define ACE_HAS_UCONTEXT_T
>
> # define ACE_HAS_SIGTIMEDWAIT
>
> # define ACE_HAS_STRERROR_R
>
>  
>
> #else  /* ! __GLIBC__ */
>
>     // Fixes a problem with some non-glibc versions of Linux...
>
> #   define ACE_LACKS_MADVISE
>
> #   define ACE_LACKS_MSG_ACCRIGHTS
>
> #endif /* ! __GLIBC__ */
>
>  
>
> #define ACE_HAS_LSEEK64
>
> //#define ACE_LACKS_LSEEK64_PROTOTYPE
>
>  
>
> #define ACE_HAS_P_READ_WRITE
>
> // Use ACE's alternate cuserid() implementation since the use of the
>
> // system cuserid() is discouraged.
>
> #define ACE_HAS_ALT_CUSERID
>
>  
>
> #if (__GLIBC__  > 2)  || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)
>
> # define ACE_HAS_ISASTREAM_PROTOTYPE
>
> # define ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE
>
> # define ACE_HAS_CPU_SET_T
>
> #endif /* __GLIBC__ > 2 || __GLIBC__ === 2 && __GLIBC_MINOR__ >= 3) */
>
>  
>
> // Then the compiler specific parts
>
>  
>
> #if defined (__INTEL_COMPILER)
>
> # include "ace/config-icc-common.h"
>
> #elif defined (__GNUG__)
>
>   // config-g++-common.h undef's ACE_HAS_STRING_CLASS with -frepo, so
>
>   // this must appear before its #include.
>
> # define ACE_HAS_STRING_CLASS
>
> # include "ace/config-g++-common.h"
>
> #elif defined (__SUNCC_PRO) || defined (__SUNPRO_CC)
>
> # include "ace/config-suncc-common.h"
>
> #elif defined (__PGI)
>
> // Portable group compiler
>
> # define ACE_HAS_CPLUSPLUS_HEADERS
>
> # define ACE_HAS_STDCPP_STL_INCLUDES
>
> # define ACE_HAS_STANDARD_CPP_LIBRARY 1
>
> # define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
>
> # define ACE_LACKS_SWAB
>
> #elif defined (__GNUC__)
>
> /**
>
> * GNU C compiler.
>
> *
>
> * We need to recognize the GNU C compiler since TAO has at least one
>
> * C source header and file
>
> * (TAO/orbsvcs/orbsvcs/SSLIOP/params_dup.{h,c}) that may indirectly
>
> * include this
>
> */
>
> #else  /* ! __GNUG__ && !__DECCXX && !__INTEL_COMPILER && && !__PGI */
>
> #  ifdef __cplusplus  /* Let it slide for C compilers. */
>
> #    error unsupported compiler in ace/config-linux.h
>
> #  endif  /* __cplusplus */
>
> #endif /* ! __GNUG__*/
>
>  
>
> // Completely common part :-)
>
>  
>
> // Platform/compiler has the sigwait(2) prototype
>
> #define ACE_HAS_SIGWAIT
>
>  
>
> #define ACE_HAS_SIGSUSPEND
>
>  
>
> #define ACE_HAS_UALARM
>
>  
>
> #define ACE_HAS_STRSIGNAL
>
>  
>
> #ifndef ACE_HAS_POSIX_REALTIME_SIGNALS
>
> # define ACE_HAS_POSIX_REALTIME_SIGNALS
>
> #endif /* ACE_HAS_POSIX_REALTIME_SIGNALS */
>
>  
>
> #define ACE_HAS_XPG4_MULTIBYTE_CHAR
>
> #define ACE_HAS_VFWPRINTF
>
>  
>
> #define ACE_LACKS_ITOW
>
> #define ACE_LACKS_WCSICMP
>
> #define ACE_LACKS_WCSNICMP
>
> #define ACE_LACKS_ISWASCII
>
>  
>
> #define ACE_HAS_3_PARAM_WCSTOK
>
>  
>
> #define ACE_HAS_3_PARAM_READDIR_R
>
>  
>
> #if !defined (ACE_DEFAULT_BASE_ADDR)
>
> #  define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char* >(0x80000000))
>
> #endif /* ! ACE_DEFAULT_BASE_ADDR */
>
>  
>
> #define ACE_HAS_ALLOCA
>
>  
>
> // Compiler/platform has <alloca.h>
>
> #define ACE_HAS_ALLOCA_H
>
> #define ACE_HAS_SYS_SYSINFO_H
>
> #define ACE_HAS_LINUX_SYSINFO
>
>  
>
> // Compiler/platform has the getrusage() system call.
>
> #define ACE_HAS_GETRUSAGE
>
> #define ACE_HAS_GETRUSAGE_PROTOTYPE
>
>  
>
> #define ACE_HAS_BYTESWAP_H
>
> #define ACE_HAS_BSWAP_16
>
> #define ACE_HAS_BSWAP_32
>
>  
>
> #if defined (__GNUC__)
>
> #  define ACE_HAS_BSWAP_64
>
> #endif
>
>  
>
> #define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
>
>  
>
> // Optimize ACE_Handle_Set for select().
>
> #define ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT
>
>  
>
> // ONLY define this if you have config'd multicast into a 2.0.34 or
>
> // prior kernel.  It is enabled by default in 2.0.35 kernels.
>
> #if !defined (ACE_HAS_IP_MULTICAST)
>
> # define ACE_HAS_IP_MULTICAST
>
> #endif /* ! ACE_HAS_IP_MULTICAST */
>
>  
>
> // At least for IPv4, Linux lacks perfect filtering.
>
> #if !defined ACE_LACKS_PERFECT_MULTICAST_FILTERING
>
> # define ACE_LACKS_PERFECT_MULTICAST_FILTERING 1
>
> #endif /* ACE_LACKS_PERFECT_MULTICAST_FILTERING */
>
>  
>
> #define ACE_HAS_BIG_FD_SET
>
>  
>
> // Linux defines struct msghdr in /usr/include/socket.h
>
> #define ACE_HAS_MSG
>
>  
>
> // Linux "improved" the interface to select() so that it modifies
>
> // the struct timeval to reflect the amount of time not slept
>
> // (see NOTES in Linux's select(2) man page).
>
> #define ACE_HAS_NONCONST_SELECT_TIMEVAL
>
>  
>
> #define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 65535
>
>  
>
> #define ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE 1
>
>  
>
> #define ACE_HAS_GETPAGESIZE 1
>
>  
>
> // Platform defines struct timespec but not timespec_t
>
> #define ACE_LACKS_TIMESPEC_T
>
>  
>
> // Platform supplies scandir()
>
> #define ACE_HAS_SCANDIR
>
> #if (__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 10)
>
> // Although the scandir man page says otherwise, this setting is correct.
>
> // The setting was fixed in 2.10, so do not use the hack after that.
>
> #define ACE_SCANDIR_CMP_USES_CONST_VOIDPTR
>
> #endif
>
>  
>
> // A conflict appears when including both <ucontext.h> and
>
> // <sys/procfs.h> with recent glibc headers.
>
> //#define ACE_HAS_PROC_FS
>
>  
>
> // Platform supports System V IPC (most versions of UNIX, but not Win32)
>
> #define ACE_HAS_SYSV_IPC
>
>  
>
> // Compiler/platform contains the <sys/syscall.h> file.
>
> #define ACE_HAS_SYS_SYSCALL_H
>
>  
>
> // Platform/compiler supports global timezone variable.
>
> #define ACE_HAS_TIMEZONE
>
>  
>
> #define ACE_HAS_TIMEZONE_GETTIMEOFDAY
>
>  
>
> // Compiler supports the ssize_t typedef.
>
> #define ACE_HAS_SSIZE_T
>
>  
>
> // Compiler/platform defines the sig_atomic_t typedef.
>
> #define ACE_HAS_SIG_ATOMIC_T
>
>  
>
> // Compiler/platform defines a union semun for SysV shared memory.
>
> #define ACE_HAS_SEMUN
>
>  
>
> #define ACE_HAS_POSIX_TIME
>
>  
>
> #define ACE_HAS_GPERF
>
>  
>
> #define ACE_HAS_DIRENT
>
>  
>
> // Starting with FC9 rawhide this file is not available anymore but
>
> // this define is set
>
> #if defined _XOPEN_STREAMS && _XOPEN_STREAMS == -1
>
> # define ACE_LACKS_STROPTS_H
>
> # define ACE_LACKS_STRRECVFD
>
> #endif
>
>  
>
> #if !defined (ACE_LACKS_STROPTS_H)
>
> # define ACE_HAS_STRBUF_T
>
> #endif
>
>  
>
> #if defined (__ia64) || defined(__alpha) || defined (__x86_64__) ||
> defined(__powerpc64__) || (defined(__mips__) && defined(__LP64__)) ||
> defined (__aarch64__)
>
> // On 64 bit platforms, the "long" type is 64-bits.  Override the
>
> // default 32-bit platform-specific format specifiers appropriately.
>
> # define ACE_UINT64_FORMAT_SPECIFIER_ASCII "%lu"
>
> # define ACE_SSIZE_T_FORMAT_SPECIFIER_ASCII "%ld"
>
> # define ACE_SIZE_T_FORMAT_SPECIFIER_ASCII "%lu"
>
> #endif /* __ia64 */
>
>  
>
> #define ACE_SIZEOF_WCHAR 4
>
>  
>
> #if defined (__powerpc__) && !defined (ACE_SIZEOF_LONG_DOUBLE)
>
> // 32bit PowerPC Linux uses 128bit long double
>
> # define ACE_SIZEOF_LONG_DOUBLE 16
>
> #endif
>
>  
>
> #define ACE_LACKS_PTHREAD_SCOPE_PROCESS
>
>  
>
> #define ACE_LACKS_GETIPNODEBYADDR
>
> #define ACE_LACKS_GETIPNODEBYNAME
>
>  
>
> // Platform has POSIX terminal interface.
>
> #define ACE_HAS_TERMIOS
>
>  
>
> // Linux implements sendfile().
>
> #define ACE_HAS_SENDFILE 1
>
>  
>
> #define ACE_HAS_VOIDPTR_MMAP
>
>  
>
> #define ACE_HAS_ICMP_SUPPORT 1
>
>  
>
> #define ACE_HAS_VASPRINTF
>
>  
>
> // According to man pages Linux uses different (compared to UNIX
> systems) types
>
> // for setting IP_MULTICAST_TTL and IPV6_MULTICAST_LOOP /
> IP_MULTICAST_LOOP
>
> // in setsockopt/getsockopt.
>
> // In the current (circa 2012) kernel source however there is an
> explicit check
>
> // for IPV6_MULTICAST_LOOP being sizeof(int). Anything else is
> rejected so it must
>
> // not be a passed a bool, irrespective of what the man pages (still) say.
>
> // i.e. #define ACE_HAS_IPV6_MULTICAST_LOOP_AS_BOOL 1 is wrong
>
> #define ACE_HAS_IP_MULTICAST_TTL_AS_INT 1
>
> #define ACE_HAS_IP_MULTICAST_LOOP_AS_INT 1
>
>  
>
> #if defined (ACE_LACKS_NETWORKING)
>
> # include "ace/config-posix-nonetworking.h"
>
> #else
>
> # define ACE_HAS_NETLINK
>
> # define ACE_HAS_GETIFADDRS
>
> #endif
>
>  
>
> #if !defined (ACE_LACKS_LINUX_VERSION_H)
>
> # include <linux/version.h>
>
> #endif /* !ACE_LACKS_LINUX_VERSION_H */
>
>  
>
> #if !defined (ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO)
>
> // Detect if getsockname() and getpeername() returns random values in
>
> // the sockaddr_in::sin_zero field by evaluation of the kernel
>
> // version. Since version 2.5.47 this problem is fixed.
>
> #  if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,47))
>
> #    define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 0
>
> #  else
>
> #    define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 1
>
> #  endif  /* (LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,47)) */
>
> #endif  /* ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO */
>
>  
>
> #if !defined (ACE_HAS_EVENT_POLL) && !defined (ACE_HAS_DEV_POLL)
>
> # if (LINUX_VERSION_CODE > KERNEL_VERSION (2,6,0))
>
> #  define ACE_HAS_EVENT_POLL
>
> # endif
>
> #endif
>
>  
>
> #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,8))
>
> # define ACE_HAS_SCHED_GETAFFINITY 1
>
> # define ACE_HAS_SCHED_SETAFFINITY 1
>
> #endif
>
>  
>
> // This is ghastly, but as long as there are platforms supported
>
> // which define the right POSIX macros but lack actual support
>
> // we have no choice.
>
> // RHEL4 fails (2.6.9) while RHEL5 works (2.6.18)
>
> #if !defined (ACE_LACKS_CONDATTR_SETCLOCK)
>
> # if !defined (ACE_LACKS_LINUX_VERSION_H)
>
> #  include <linux/version.h>
>
> # endif /* !ACE_LACKS_LINUX_VERSION_H */
>
> # if (LINUX_VERSION_CODE < KERNEL_VERSION (2,6,18))
>
> #  define ACE_LACKS_CONDATTR_SETCLOCK
>
> # endif
>
> #endif
>
>  
>
> #define ACE_HAS_SVR4_DYNAMIC_LINKING
>
> #define ACE_HAS_AUTOMATIC_INIT_FINI
>
> #define ACE_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE
>
> #define ACE_HAS_RECURSIVE_MUTEXES
>
> #define ACE_HAS_THREAD_SPECIFIC_STORAGE
>
> #define ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS
>
> #define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R
>
> #define ACE_HAS_REENTRANT_FUNCTIONS
>
> #define ACE_HAS_MNTENT
>
>  
>
> // To support UCLIBC
>
> #if defined (__UCLIBC__)
>
>  
>
> #  define ACE_LACKS_STROPTS_H
>
> #  define ACE_LACKS_GETLOADAVG
>
> #  define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS
>
> #  define ACE_LACKS_PTHREAD_SETSTACK
>
> #  define ACE_LACKS_STRRECVFD
>
> #  define ACE_HAS_CPU_SET_T
>
>  
>
> #  if defined (ACE_HAS_STRBUF_T)
>
> #    undef ACE_HAS_STRBUF_T
>
> #  endif /* ACE_HAS_STRBUF_T */
>
>  
>
> #  if defined (ACE_HAS_PTHREAD_SETSTACK)
>
> #    undef ACE_HAS_PTHREAD_SETSTACK
>
> #  endif /* ACE_HAS_PTHREAD_SETSTACK */
>
>  
>
> #  if defined (ACE_HAS_AIO_CALLS)
>
> #    undef ACE_HAS_AIO_CALLS
>
> #  endif /* ACE_HAS_AIO_CALLS */
>
>  
>
> #  if defined (ACE_HAS_GETIFADDRS)
>
> #    undef ACE_HAS_GETIFADDRS
>
> #  endif /* ACE_HAS_GETIFADDRS */
>
>  
>
> #  if defined (ACE_SCANDIR_CMP_USES_VOIDPTR)
>
> #    undef ACE_SCANDIR_CMP_USES_VOIDPTR
>
> #  endif /* ACE_SCANDIR_CMP_USES_VOIDPTR */
>
>  
>
> #  if defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
>
> #    undef ACE_SCANDIR_CMP_USES_CONST_VOIDPTR
>
> #  endif /* ACE_SCANDIR_CMP_USES_CONST_VOIDPTR */
>
>  
>
> #  if defined (ACE_HAS_EXECINFO_H)
>
> #    undef ACE_HAS_EXECINFO_H
>
> #  endif /* ACE_HAS_EXECINFO_H */
>
>  
>
> #  if defined(__GLIBC__)
>
> #    undef __GLIBC__
>
> #  endif /* __GLIBC__ */
>
>  
>
> #  if defined(ACE_HAS_SEMUN)
>
> #    undef ACE_HAS_SEMUN
>
> #  endif /* ACE_HAS_SEMUN */
>
>  
>
> #endif /* __UCLIBC__ */
>
>  
>
> #include /**/ "ace/post.h"
>
>  
>
> #undef ACE_HAS_WORKING_EXPLICIT_TEMPLATE_DESTRUCTOR
>
> #define ACE_LACKS_NEW_H
>
> #define ACE_USE_DEV_POLL_REACTOR_FOR_REACTOR_IMPL
>
> #endif /* ACE_CONFIG_LINUX_H */
>
>  
>
>  
>
>     THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE:
>
>  
>
> # -*- Makefile -*-
>
>  
>
> include $(ACE_ROOT)/include/makeinclude/platform_linux_common.GNU
>
>  
>
> ifeq ($(insure),0)
>
>   CC  ?= gcc
>
>   CXX ?= g++
>
>   CXX_FOR_VERSION_TEST ?= $(CXX)
>
> else
>
>   CXX_FOR_VERSION_TEST ?= g++
>
> endif
>
>  
>
> CXX_FULL_VERSION := $(shell $(CXX_FOR_VERSION_TEST) --version)
>
> CXX_VERSION := $(shell $(CXX_FOR_VERSION_TEST) -dumpversion)
>
>  
>
> ifeq (Ubuntu, $(findstring Ubuntu,$(LSB_RELEASE_ID)))
>
>   ifeq (7.10, $(findstring 7.10,$(LSB_RELEASE_RELEASE)))
>
>     no_hidden_visibility ?= 1
>
>   endif
>
>   ifeq (7.04, $(findstring 7.04,$(LSB_RELEASE_RELEASE)))
>
>     no_hidden_visibility ?= 1
>
>   endif
>
> endif
>
> ifeq (Red Hat, $(findstring Red Hat,$(CXX_FULL_VERSION)))
>
>   ifeq (4.1.1, $(findstring 4.1.1,$(CXX_VERSION)))
>
>     gcc_template_instantiation_visibility ?= 1
>
>   endif
>
>   ifeq (4.1.2, $(findstring 4.1.2,$(CXX_VERSION)))
>
>     gcc_template_instantiation_visibility ?= 1
>
>   endif
>
> endif
>
> # Mandriva 2007
>
> ifeq (4.1.1-3mdk, $(findstring 4.1.1-3mdk,$(CXX_FULL_VERSION)))
>
>   gcc_template_instantiation_visibility ?= 1
>
> endif
>
>  
>
> ifeq ($(buildbits),32)
>
>   FLAGS_C_CC += -m32
>
>   LDFLAGS    += -m32
>
> endif
>
> ifeq ($(buildbits),64)
>
>   FLAGS_C_CC += -m64
>
>   LDFLAGS    += -m64
>
> endif
>
>  
>
> # DT_RUNPATH is preferred over DT_RPATH, but the linker will only use
> it when
>
> # this extra flag option (enable-new-dtags) is present
>
> LD_RPATH_FLAGS += -Wl,--enable-new-dtags
>
>  
>
> # Rely on _GNU_SOURCE to set these defaults defined in
> /usr/include/features.h
>
> # instead of setting them directly here (older versions of gcc don't
> set it
>
> # for you): _SVID_SOURCE _BSD_SOURCE _POSIX_SOURCE
> _POSIX_C_SOURCE=199506L, ...
>
> CPPFLAGS += -D_GNU_SOURCE
>
>  
>
> DCFLAGS  += -ggdb
>
> DCCFLAGS += -ggdb
>
> DLD      = $(CXX)
>
> LD       = $(CXX)
>
>  
>
> ifeq ($(dynamic_loader),0)
>
>   CPPFLAGS += -DACE_HAS_DYNAMIC_LINKING=0
>
> else
>
>   LIBS     += -ldl
>
> endif
>
>  
>
> ifeq ($(threads),1)
>
>   FLAGS_C_CC += -pthread
>
>   SOFLAGS += -pthread
>
>   LIBS += -lrt
>
> endif
>
>  
>
> ifeq ($(optimize),1)
>
>   SOFLAGS += -Wl,-O3
>
> endif
>
>  
>
> ifeq ($(static_stdlibs),1)
>
>   LDFLAGS += -static-libgcc -static-libstdc++
>
> endif
>
>  
>
> SOFLAGS += -shared
>
> SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<; \
>
>           $(SOLINK.cc) -o $@ $(LDFLAGS) $(VSHDIR)$*.o
>
> PRELIB  = @true
>
>  
>
> # Test for template instantiation, add to SOFLAGS if SONAME set,
>
> # add -E to LDFLAGS if using GNU ld
>
> #
>
> include $(ACE_ROOT)/include/makeinclude/platform_g++_common.GNU
>
>  
>
> # TAO with GCC 4.0.2 and -O3 seems to result in runtime issues, for
> example
>
> # the ForwardRequest PI test will fail. For GCC 4.0.2 we default to -O2
>
> ifeq ($(CXX_VERSION),4.0.2)
>
>   OCFLAGS ?= -O2
>
>   OCCFLAGS ?=-O2
>
> else
>
>   OCFLAGS ?= -O3
>
>   OCCFLAGS ?= -O3
>
> endif
>
>  
>
> # Added line below to support "Executable Shared Object" files (as
>
> # needed by the service configurator).
>
> # Marius Kjeldahl <mariusk at sn.no, marius at funcom.com>
>
> ifeq ($(threads),1)
>
>     ESOBUILD = $(COMPILEESO.cc) $(PIC) -shared -o $(VSHDIR)$*.so $<
>
>     ifndef PRELIB
>
>        PRELIB = @true
>
>     endif # ! PRELIB
>
> endif
>
>  
>
> #### GNU gas has a string limit of 4096 characters.  On Alphas,
>
> #### builds will fail due to running over that limit.  There are
>
> #### at least two workarounds:
>
> #### 1) Change the limit to 8192 characters and rebuild gas.  See
>
> ####    ACE-INSTALL.html for more information.
>
> #### 2) Don't use -g when compiling those files.
>
> #### If you're building on an Alpha and you haven't hacked and
>
> #### rebuilt gas, you might need to uncomment the following.
>
> #### ifeq ($(debug),1)
>
> ####   SUPPRESS_DASH_G = 1
>
> #### endif # debug
>
>  
>
>     CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features
>
>  
>
>     AREA/CLASS/EXAMPLE AFFECTED:
>
>     ACE_SSL_SOCK_Acceptor
>  
>
>     DOES THE PROBLEM AFFECT:
>
>         COMPILATION? No
>
>         LINKING? No
>
>             On Unix systems, did you run make realclean first?
>
>         EXECUTION? Yes, application and ACE is affected
>
>         OTHER (please specify)? No
>
>  
>
>     SYNOPSIS:
>
>     Call to ACE_SSL_SOCK_Acceptor.accept SEGVs when timeout specified
>     and FD_SETSIZE exceeded.
>
>  
>
>     DESCRIPTION:
>
>         Our application uses ACE_SSL_SOCK_Acceptor() class.  For SSL
> connections it calls
>
>        ACE_SSL_SOCK_Acceptor.accept() with a timeout parameter.  It
> was being limited to
>
>        FD_SETSIZE as the reactor is using select().  I added the
> following to the config.h
>
>        file to have the reactor use epoll() instead of select().  
>
>  
>
> #define ACE_USE_DEV_POLL_REACTOR_FOR_REACTOR_IMPL
>
>  
>
>        Testing showed we would get a SEGV when calling
> ACE_SSL_SOCK_Acceptor.accept()
>
>        when specifying a timeout parameter and FD_SETSIZE was exceeded.
>
>    
>
>     (gdb) where
>
> #0  0x0000000000000001 in ?? ()
>
> #1  0x00007f34658091dc in operator() (this=<value optimized out>,
> new_stream=<value optimized out>, timeout=0x7ffc301e4d20)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/Time_Policy.inl:45
>
> #2  stop (this=<value optimized out>, new_stream=<value optimized
> out>, timeout=0x7ffc301e4d20)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/Countdown_Time_T.cpp:46
>
> #3  update (this=<value optimized out>, new_stream=<value optimized
> out>, timeout=0x7ffc301e4d20)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/Countdown_Time_T.inl:13
>
> #4  ACE_SSL_SOCK_Acceptor::ssl_accept (this=<value optimized out>,
> new_stream=<value optimized out>, timeout=0x7ffc301e4d20)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/SSL/SSL_SOCK_Acceptor.cpp:140
>
> #5  0x00007f346580a05a in ACE_SSL_SOCK_Acceptor::accept
> (this=0xf125e0, new_stream=..., remote_addr=0x7ffc301e4c90,
>
>     timeout=0x7ffc301e4d20, restart=true, reset_new_handle=false)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/SSL/SSL_SOCK_Acceptor.cpp:194
>
> #6  0x000000000040fdd0 in TNE_Acceptor::handle_input(int) ()
>
> #7  0x00007f3465ad74e3 in upcall (this=0xef1a90, guard=...)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/Dev_Poll_Reactor.inl:84
>
> #8  ACE_Dev_Poll_Reactor::dispatch_io_event (this=0xef1a90, guard=...)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/Dev_Poll_Reactor.cpp:1299
>
> #9  0x00007f3465ad8467 in ACE_Dev_Poll_Reactor::handle_events
> (this=0xef1a90, max_wait_time=0x7ffc301e5090)
>
>     at
> /local_space/sr104371/64/ACE-6.5.0/ACE_wrappers/ace/Dev_Poll_Reactor.cpp:1009
>
> #10 0x000000000041c828 in main ()
>
>  
>
>          
>
>     REPEAT BY:
>
>          Ran application and connected a large number of clients
>
>  
>
>     SAMPLE FIX/WORKAROUND:
>
>          The issue seems to be caused by ssl_accept() using
> ACE::select().  Replacing ACE::select() with ACE::handle_ready()
>
>           as per the suggested fix in bug #3604
> <http://bugzilla.dre.vanderbilt.edu/show_bug.cgi?id=3604> resolves the
> issue.
>
>  
>
>  
>
> Best Regards
>
>  
>
>  
>
> *Sergio Romana*| Systems Integration Consultant, Application Services**
>
> sergio.romana at nttdata.com <mailto:sergio.romana at nttdata.com>
>
> *NTT DATA Services*| *nttdataservices.com*
> <https://us.nttdata.com/en>| *_ at nttdataservices_**
> *Consulting | Industry Solutions | Digital | Cloud | Application,
> Infrastructure & BPO Services
>
>  
>
> NTT DATA Services UK Limited
>
>  
>
> Disclaimer: This email and any attachments are sent in strictest
> confidence for the sole use of the addressee and may contain legally
> privileged, confidential, and proprietary data. If you are not the
> intended recipient, please advise the sender by replying promptly to
> this email and then delete and destroy this email and any attachments
> without any further use, copying or forwarding.
>
> _______________________________________________
> ace-bugs mailing list
> ace-bugs at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/cgi-bin/mailman/listinfo/ace-bugs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.isis.vanderbilt.edu/pipermail/ace-bugs/attachments/20200629/77e3dfbd/attachment-0001.html>


More information about the ace-bugs mailing list