jmx-dev RFR: 8350939: Revisit Windows PDH buffer size calculation for OperatingSystemMXBean

Kevin Walls kevinw at openjdk.org
Tue Mar 4 08:17:53 UTC 2025


On Tue, 4 Mar 2025 06:42:09 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Following on from JDK-8350820, which backed out the _snprintf to snprintf change (JDK-8336289) in OperatingSystemImpl.c on Windows, because the counter names were being truncated (so CPU monitoring was not possible).
>> 
>> This change moves to snprintf again, but the counter names are not truncated.
>> 
>> snprintf must need the null terminator to fit inside the buffer length given.  It does not, and snprintf truncates (and always add the null terminator).
>
> src/jdk.management/windows/native/libmanagement_ext/OperatingSystemImpl.c line 296:
> 
>> 294: /* PDH format patterns, and lengths of their constant component. */
>> 295: static const char* const OBJECT_COUNTER_FMT = "\\%s\\%s";
>> 296: static const size_t OBJECT_COUNTER_FMT_LEN = 2;
> 
> Pre-existing but as per earlier discussions on this, what exactly do these lengths mean??

Yes was trying to clarify that with the comment: the "constant component", the number of fixed characters.  So allocation size is e.g. OBJECT_COUNTER_FMT_LEN (==2) to account for the two backslashes in that format, plus the lengths of the two strings, plus the terminator.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23861#discussion_r1978858171


More information about the jmx-dev mailing list