From 7af51501d5a70e6cdff45d7c1c804f0e820d1d3a Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Tue, 04 Aug 2026 11:53:39 +0000
Subject: [PATCH] Fix CodeQL note-severity alerts: Thread.run() calls and getters leaking internal state (#847)

---
 opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/StatsThread.java |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/StatsThread.java b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/StatsThread.java
index 6e55710..565efc2 100644
--- a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/StatsThread.java
+++ b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/StatsThread.java
@@ -12,6 +12,7 @@
  * information: "Portions Copyright [year] [name of copyright owner]".
  *
  * Copyright 2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC.
  */
 package com.forgerock.opendj.ldap.tools;
 
@@ -47,8 +48,12 @@
  * Statistics thread base implementation.
  * <p>
  * The goal of this class is to compute and print rate tool general statistics.
+ * <p>
+ * This class is a {@link Runnable} rather than a {@link Thread}: it is run periodically by
+ * {@code statThreadScheduler}, and {@link #stopRecording(boolean)} calls {@link #run()} directly
+ * to print the last line of statistics.
  */
-class StatsThread extends Thread {
+class StatsThread implements Runnable {
 
     static final String STAT_ID_PREFIX = "org.forgerock.opendj.";
 
@@ -263,10 +268,10 @@
     private final RateReporter reporter;
     private long startTimeMs;
     private volatile boolean warmingUp;
-    private final ScheduledExecutorService statThreadScheduler = Executors.newSingleThreadScheduledExecutor();
+    private final ScheduledExecutorService statThreadScheduler =
+            Executors.newSingleThreadScheduledExecutor(runnable -> new Thread(runnable, "Stats Thread"));
 
     StatsThread(final PerformanceRunner performanceRunner, final ConsoleApplication application) {
-        super("Stats Thread");
         resetStats();
         this.performanceRunner = performanceRunner;
         this.app = application;

--
Gitblit v1.10.0