Request for review: 6749267: Signal handler should save/restore errno
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Mon Feb 18 12:37:23 PST 2013
Harold,
Thanks for checking this.
I forgot that the perror() message always matches the latest errno.
Thanks,
Serguei
On 2/18/13 12:29 PM, harold seigel wrote:
> Hi Serguei,
>
> Thanks for reviewing this!
>
> I think that the perror() message will also be preserved. I tried
> this with a small C++ program:
>
> #include <stdio.h>
> #include <errno.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <unistd.h>
>
> int main(int argc, char * argv[]) {
> char buf[20];
> int old_errno;
> int bad_fd = 23;
> int res = open("/i/dont/exist", O_RDONLY);
> old_errno = errno;
> perror("errno: ");
>
> res = read(bad_fd, buf, 10);
> perror("errno: ");
>
> errno = old_errno;
> perror("errno: ");
> return 0;
> }
>
> When I ran this program, I got the following result:
>
> % ./a.out
> errno: : No such file or directory
> errno: : Bad file descriptor
> errno: : No such file or directory
>
> Hopefully, our code will behave the same way.
>
> Thanks, Harold
>
> On 2/18/2013 3:10 PM, serguei.spitsyn at oracle.com wrote:
>> Looks good.
>>
>> I'm not sure it is an ultimate solution though.
>> The error message that is reported by the perror() might be lost as
>> well,
>> but I'm not sure yet if it is possible to restore it as well.
>>
>> A link:
>> http://www.kernel.org/doc/man-pages/online/pages/man3/perror.3.html
>>
>>
>> Thanks,
>> Serguei
>>
>>
>>
>> On 2/18/13 6:07 AM, harold seigel wrote:
>>> Hi,
>>>
>>> Please review the following change.
>>>
>>> Summary: With this change, the actual signal handler saves the errno
>>> before calling the function that does most of the signal handling
>>> processing. It then restores the value of errno when the signal
>>> handling processing function returns.
>>>
>>> Open webrev: http://cr.openjdk.java.net/~hseigel/bug_6749267/
>>> <http://cr.openjdk.java.net/%7Ehseigel/bug_6749267/>
>>>
>>> Bug link at: https://jbs.oracle.com/bugs/browse/JDK-6749267
>>>
>>> The changes were tested with JPRT, JCK Lang and VM tests, UTE tests,
>>> and with JPRT. Also, I used the debugger to change the value of
>>> errno inside of the signal handling processing method and then
>>> verified that it got restored properly.
>>>
>>> Thanks! Harold
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20130218/eb05efc2/attachment.html
More information about the hotspot-runtime-dev
mailing list