From 560de098aa3ca616284a4c5cda2ac25030cb03f7 Mon Sep 17 00:00:00 2001 From: Ali Azam Rana <85216275+alirana01@users.noreply.github.com> Date: Mon, 22 Jul 2024 12:24:58 +0200 Subject: [PATCH 1/3] changes to verify process --- bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml | 4 ++-- .../com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml b/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml index c44aa77a0..e38e53e09 100644 --- a/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml +++ b/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml @@ -152,7 +152,7 @@ resolver="com.espressif.idf.debug.gdbjtag.openocd.SvdPathResolver"> - - + --> Date: Fri, 13 Sep 2024 12:09:00 +0200 Subject: [PATCH 2/3] Revert "changes to verify process" This reverts commit 560de098aa3ca616284a4c5cda2ac25030cb03f7. --- bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml | 4 ++-- .../com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml b/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml index e38e53e09..c44aa77a0 100644 --- a/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml +++ b/bundles/com.espressif.idf.debug.gdbjtag.openocd/plugin.xml @@ -152,7 +152,7 @@ resolver="com.espressif.idf.debug.gdbjtag.openocd.SvdPathResolver"> - + Date: Fri, 13 Sep 2024 12:33:21 +0200 Subject: [PATCH 3/3] fix(port): updated code for port verification To Improved the code for the port checking and introduced retries and waiting time --- .../espressif/idf/core/util/PortChecker.java | 44 ++++++++++++++++--- .../idf/debug/gdbjtag/openocd/dsf/Launch.java | 9 ++-- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java index 053777788..593817713 100644 --- a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java @@ -4,6 +4,7 @@ *******************************************************************************/ package com.espressif.idf.core.util; +import java.io.IOException; import java.net.Socket; import com.espressif.idf.core.logging.Logger; @@ -24,14 +25,45 @@ private PortChecker() public static boolean isPortAvailable(int port) { - try (Socket ignored = new Socket("localhost", port)) //$NON-NLS-1$ - { - return false; - } - catch (Exception e) + int attempts = 0; + int retryCount = 3; + long retryDelayMillis = 200; + + while (attempts <= retryCount) { - return true; + try (Socket ignored = new Socket("localhost", port)) //$NON-NLS-1$ + { + // If the socket opens, the port is in use + return false; + } + catch (IOException e) + { + // Port is unavailable, retrying if there are attempts left + if (attempts == retryCount) + { + // After exhausting all retries, return false + Logger.log("Port " + port + " is not available after " + retryCount + " retries."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + return false; // Failure, port is still not available + } + + attempts++; + + // Log retry attempt + Logger.log("Attempt " + attempts + " failed, retrying in " + retryDelayMillis + " ms..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + + try + { + Thread.sleep(retryDelayMillis); + } + catch (InterruptedException interruptedException) + { + Thread.currentThread().interrupt(); // Restore interrupt status + Logger.log("Port availability check interrupted."); //$NON-NLS-1$ + return false; // If interrupted, assume port unavailable and stop + } + } } + return true; //Fallback not reachable } /** diff --git a/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java b/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java index 8749df392..5b96137f2 100644 --- a/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java +++ b/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java @@ -147,9 +147,12 @@ protected void provideDefaults(ILaunchConfigurationWorkingCopy config) throws Co fDefaultPreferences.getGdbClientExecutable()); } - int availableRemotePort = PortChecker.getAvailablePort(config.getAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, - DefaultPreferences.GDB_SERVER_GDB_PORT_NUMBER_DEFAULT)); - config.setAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, availableRemotePort); + if (Configuration.getDoStartGdbServer(config)) + { + int availableRemotePort = PortChecker.getAvailablePort(config.getAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, + DefaultPreferences.GDB_SERVER_GDB_PORT_NUMBER_DEFAULT)); + config.setAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, availableRemotePort); + } config.setAttribute(DebugPlugin.ATTR_PROCESS_FACTORY_ID, CustomIdfProcessFactory.ID); }