On Sun, 7 Mar 2021 22:00:41 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>> Yes, including c++ standard library headers like <ostream> means you need to 
>> deal with C++ exceptions thrown from library functions, and the code needs 
>> to be compiled with unwind capabilities. If its not switched on, and a C++ 
>> exception happens, the behavior is undefined. In my experience it results in 
>> the process being terminated.
>> 
>> I wondered why C++ std headers are even used. The source code looks C-ish; 
>> but "8196681: Java Access Bridge logging and debug flags dynamically 
>> controlled" added some coding, adding a bunch of C++11x semantics and 
>> included C++ std headers. Using "/Ehsc" had even been discussed: 
>> https://mail.openjdk.java.net/pipermail/awt-dev/2018-December/014847.html 
>> but not done.
>> 
>> Adding /Ehsc is fine of course, but I think thats not enough. Now C++ 
>> exceptions can pass through the code, but if they do, then what? E.g. this 
>> function `getTimeStamp()` added with 8196681:
>> 
>> https://github.com/openjdk/jdk/blob/113b5184cfc78fde057a7fe4d5872b463930da00/src/jdk.accessibility/windows/native/common/AccessBridgeDebug.cpp#L85
>> 
>> calls into the C++ standard library to get a time stamp. Can't these 
>> function not throw C++ exceptions? Is that not what the compiler is warning 
>> about? If they throw, exceptions propagate through the code unbounded, until 
>> they either end the process or cause havoc at the next upper 
>> C-only-interface.
>> 
>> Or, maybe, rewrite this coding to use standard C- and Windows-APIs.  I think 
>> 8196681 could had been done with traditional windows- or standard C APIs. In 
>> particular, `getTimeStamp()` could probably be done simply with 
>> `GetTickCount` or `GetSystemTime` or functions from time.h.
>> 
>> Cheers, Thomas
>
>> I wondered why C++ std headers are even used. The source code looks C-ish; 
>> but "8196681: Java Access Bridge logging and debug flags dynamically 
>> controlled" added some coding, adding a bunch of C++11x semantics and 
>> included C++ std headers. Using "/Ehsc" had even been discussed: 
>> https://mail.openjdk.java.net/pipermail/awt-dev/2018-December/014847.html 
>> but not done.
> 
> After that discussion the usage of "string.h"/etc was dropped and "C string 
> manipulation API" was used instead, and that suppressed the warning. I do not 
> know why it was not complaining about "getTimeStamp". I think the fix should 
> refactor the code again.

Thank you for comments! I refactored `getTimeStamp()` not to use STL functions 
in new commit. The error messages have gone without /EHsc.
I use `11644473600000ULL` to rebase Epoch from 1601 to 1970, it comes from 
ProcessHandleImpl_win.c:
https://github.com/openjdk/jdk/blob/22a3117d229cba10c690a4e66baf9c754a09e57c/src/java.base/windows/native/libjava/ProcessHandleImpl_win.c#L342

-------------

PR: https://git.openjdk.java.net/jdk/pull/2859

Reply via email to