RFR - 8133249: Occasional SIGSEGV: non thread-safe use of strerr in getLastErrorString

Rob McKenna rob.mckenna at oracle.com
Thu Sep 24 14:10:45 UTC 2015

Hi folks,

Uploaded a newer version:


To address Rogers question, this needed to be separate from 
getLastErrorString because of the return type and the err arg, but I 
like the idea of avoiding the creation of a new file. Also, all of the 
files that require the new function (now called getErrorString) already 
include jni_util.c so it makes sense to put this in jni_util_md.c with 

As per Christos' suggestion I've mapped strerr_r to __xpg_strerror_r 
instead of using the gnu strerror_r. I'd be interested to hear feedback 
on this change.

I've corrected the oversights around the jli sources and 
PlainDatagramSocket. The jli stuff shouldn't have been there in the 
first place.

Ivan, I've kept the return type. As you note, I should have been using 
it in ProcessImpl_md.c and the extra information from the return is 
potentially useful.


On 23/09/15 14:14, Ivan Gerasimov wrote:
> Hi Rob!
> On 21.09.2015 18:53, Rob McKenna wrote:
>> Hi folks,
>> Requesting a review of this change which switches corelibs usages of
>> the thread-unsafe strerror over to strerror_r/strerror_s:
>> http://cr.openjdk.java.net/~robm/8133249/webrev.01/
> I think it would be better to have  jdk_strerror(errno, tmpbuf,
> sizeof(tmpbuf))  instead of  jdk_strerror(errno, tmpbuf, (size_t) 1024),
> just for the sake of avoiding constant duplication.
> I don't see the return code of jdk_strerror() is ever used. I suggest
> using it in ProcessImpl_md.c (see below), or just making this function
> return void.
> jni_util_md.c:
> - why can't we just call  jdk_strerror(errno, buf, len)  and get rid of
> the temp buffer?
> java_md_common.c:
> - commented out #include @ line 26
> - the change in JLI_ReportErrorMessageSys() looks incomplete
> ProcessImpl_md.c:
> - would it make sense to check if jdk_strerror() == EINVAL instead of
> comparing the strings?
> PlainDatagramSocketImpl.c:
> - #include added, but no other changes were made.
> TwoStacksPlainDatagramSocketImpl.c:
> - buf is declared to be char[1024], but only up to 255 chars are used.
> - would be better to move the buf declaration closer to its use, maybe
> next to char errmsg[300] line?
> jdk_strerror.c:
> - minor nit: extra space after strerror_r at lines 46 and 63.
> Sincerely yours,
> Ivan

More information about the core-libs-dev mailing list