<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
probably makes sense to fix regardless... my bad<br>
<br>
<div class="moz-cite-prefix">On 5/29/25 3:21 AM, Kevin Walls wrote:<br>
</div>
<blockquote type="cite" cite="mid:SN7PR10MB7032F08474EA328AF169C96B9766A@SN7PR10MB7032.namprd10.prod.outlook.com">
<style type="text/css" style="display:none;">P {margin-top:0;margin-bottom:0;}</style>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi --</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Just to be clear, is this an actual persistent leak that we can
observe, or is it that we could close earlier with
try-with-resources?</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I'm not seeing a leak when calling a line like this over and
over in a tight loop:</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
final var cmdline = Files.lines(path).findFirst();</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks!</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Kevin</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
<br>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b>
serviceability-dev <a class="moz-txt-link-rfc2396E" href="mailto:serviceability-dev-retn@openjdk.org"><serviceability-dev-retn@openjdk.org></a>
on behalf of Philippe Marschall <a class="moz-txt-link-rfc2396E" href="mailto:kustos@gmx.net"><kustos@gmx.net></a><br>
<b>Sent:</b> Saturday, May 24, 2025 8:26 PM<br>
<b>To:</b> <a class="moz-txt-link-abbreviated" href="mailto:serviceability-dev@openjdk.java.net">serviceability-dev@openjdk.java.net</a>
<a class="moz-txt-link-rfc2396E" href="mailto:serviceability-dev@openjdk.java.net"><serviceability-dev@openjdk.java.net></a><br>
<b>Subject:</b> VirtualMachineImpl.checkCatchesAndSendQuitTo
leaks file handles</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hello<br>
<br>
I believe
sun.tools.attach.VirtualMachineImpl#checkCatchesAndSendQuitTo
<br>
on Linux leaks file handles after JDK-8327114 [1].<br>
<br>
The issue is the line 361 [2]<br>
<br>
final var cmdline =
Files.lines(procPid.resolve("cmdline")).findFirst();<br>
<br>
Because the Stream is not closed the file handle is not
closed as well.<br>
<br>
Compare this to ProcessHelper#getCommandLine which uses
the correct idiom.<br>
<br>
try (Stream<String> lines =<br>
Files.lines(Paths.get("/proc/" + pid + "/cmdline")))
{<br>
return lines.findFirst().orElse(null);<br>
}<br>
<br>
The fix is easy, rewrite the code like so:<br>
<br>
final Optional<String> cmdline;<br>
try (var lines = Files.lines(procPid.resolve("cmdline")))
{<br>
cmdline = lines.findFirst();<br>
}<br>
<br>
If somebody opens a JIRA bug I can work on a PR.<br>
<br>
[1] <a href="https://bugs.openjdk.org/browse/JDK-8327114" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8327114</a><br>
[2] <br>
<a href="https://github.com/openjdk/jdk/blob/master/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java#L361" moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/openjdk/jdk/blob/master/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java#L361</a><br>
[3] <br>
<a href="https://github.com/openjdk/jdk/blob/master/src/jdk.jcmd/linux/classes/sun/tools/common/ProcessHelper.java#L117" moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/openjdk/jdk/blob/master/src/jdk.jcmd/linux/classes/sun/tools/common/ProcessHelper.java#L117</a><br>
<br>
Regards<br>
Philippe<br>
</div>
</span></font></div>
</blockquote>
<br>
</body>
</html>