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);
}