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