qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Stitcher <astitc...@redhat.com>
Subject Re: [Qpid Proton 0.12.2] errno not thread-safe on Solaris
Date Mon, 29 Aug 2016 14:59:04 GMT
Adel

Raise an JIRA issue so this does not get overlooked or forgotten.

[As a side point, this list is not the best way to report bugs, but
entirely the best way to ask for advice and help!]

Andrew

On Mon, 2016-08-29 at 09:32 +0200, Adel Boutros wrote:
> Hello,
> 
> For some time, we were having random errors on Solaris with proton-c
> where we would get a transport error "proton:io connect: Error 0". We
> were finally able to reproduce it in a multi-threading environment.
> It turns out some C/C++ system calls such as opening sockets will set
> the value of "errno" and some parts of proton-c code you rely on the
> value of errno to determine if the operation was successful or
> not[1].
> 
> The issue is that errno is not thread safe[2] and as a consequence if
> by the time Thread A was checking the value of errno, Thread B has
> set it to something else, the check will fail.
> 
> We resolved it by compiling Proton with "-D_REENTRANT" which makes
> errno thread local variable.
> 
> Please note we only got this error on Solaris because on Linux
> setting "-lpthread" implies "-D_REENTRANT flag" according to
> stackoverflow[2].
> 
> Do you think this flag could be set by default in the CMakeList of
> proton to avoid others having the same issue?
> 
> On Solaris:
> /usr/include/errno.h
> 
> #if defined(_REENTRANT) || defined(_TS_ERRNO) || _POSIX_C_SOURCE - 0
> >= 199506L
> extern int *___errno();
> #define errno (*(___errno()))
> #else
> extern int errno;
> /* ANSI C++ requires that errno be a macro */
> #if __cplusplus >= 199711L
> #define errno errno
> #endif
> #endif  /* defined(_REENTRANT) || defined(_TS_ERRNO) */
> 
> PS: The code is still the same on 0.14.0. So the error could happen
> there as well I guess.
> 
> Regards,
> Adel
> 
> [1]: https://github.com/apache/qpid-proton/blob/0.12.2/proton-c/src/p
> osix/io.c (line 187-188)
> [2]: http://stackoverflow.com/questions/1694164/is-errno-thread-safe 
> [3]: http://stackoverflow.com/questions/875789/gcc-do-i-need-d-reentr
> ant-with-pthreads 
>  		 	   		  

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org


Mime
View raw message