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:
http://cr.openjdk.java.net/~robm/8133249/webrev.02/
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
getLastErrorString.
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.
-Rob
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