From 4c04667fdbbc8ed75088bff26c3eef8b18bf087b Mon Sep 17 00:00:00 2001
From: Eric Gallimore <egallimore@whoi.edu>
Date: Tue, 20 Feb 2024 14:33:20 -0500
Subject: [PATCH] Normalize and fix shutting down nodes.  Removes calls to
 node.close() for nodes that don't have a close() method.  Log "node name
 shutdown" messages on node termination if shutdown occurs without
 RosInterruptException being raised.  For acomms_driver_node.py, check that
 the node is still in-scope in exceptions handler.

---
 ros_acomms/src/acomms_driver_node.py                   | 4 +++-
 ros_acomms/src/modem_sensor_data_node.py               | 3 ++-
 ros_acomms/src/packet_dispatch_node.py                 | 1 -
 ros_acomms/src/tdma_advanced_node.py                   | 5 +++--
 ros_acomms/src/tdma_node.py                            | 2 +-
 ros_acomms/src/tdma_scripted_node.py                   | 5 +++--
 ros_acomms/src/version_node.py                         | 2 +-
 ros_acomms_modeling/src/clock_generator.py             | 3 ++-
 ros_acomms_modeling/src/modem_location_sim_node.py     | 1 +
 ros_acomms_modeling/src/modem_sim_node.py              | 5 ++---
 ros_acomms_modeling/src/sim_packet_performance_node.py | 3 +--
 ros_acomms_modeling/src/sim_transmission_loss_node.py  | 3 +--
 ros_acomms_modeling/src/simple_noise_model_node.py     | 5 ++---
 13 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/ros_acomms/src/acomms_driver_node.py b/ros_acomms/src/acomms_driver_node.py
index f8314fec..b297dbb2 100755
--- a/ros_acomms/src/acomms_driver_node.py
+++ b/ros_acomms/src/acomms_driver_node.py
@@ -805,6 +805,7 @@ class AcommsDriverNode(object):
 
 
 if __name__ == "__main__":
+    node = None
     try:
         node = AcommsDriverNode()
 
@@ -819,5 +820,6 @@ if __name__ == "__main__":
         rospy.loginfo("Acomms node shutdown")
 
     except rospy.ROSInterruptException:
-        node.close()
+        if node is not None:
+            node.close()
         rospy.loginfo("Acomms node shutdown (interrupt)")
diff --git a/ros_acomms/src/modem_sensor_data_node.py b/ros_acomms/src/modem_sensor_data_node.py
index 11df4884..6e271a45 100755
--- a/ros_acomms/src/modem_sensor_data_node.py
+++ b/ros_acomms/src/modem_sensor_data_node.py
@@ -58,5 +58,6 @@ class ModemSensorDataNode(object):
 if __name__ == '__main__':
     try:
         node = ModemSensorDataNode()  # This spins.
+        rospy.loginfo("ModemSensorDataNode shutdown")
     except rospy.ROSInterruptException:
-        rospy.loginfo("Acomms node shutdown (interrupt)")
+        rospy.loginfo("ModemSensorDataNode shutdown (interrupt)")
diff --git a/ros_acomms/src/packet_dispatch_node.py b/ros_acomms/src/packet_dispatch_node.py
index 1e49bc04..6f2523b8 100755
--- a/ros_acomms/src/packet_dispatch_node.py
+++ b/ros_acomms/src/packet_dispatch_node.py
@@ -169,5 +169,4 @@ if __name__ == '__main__':
         node = PacketDispatchNode()
         rospy.loginfo("Message Dispatch shutdown")
     except rospy.ROSInterruptException:
-        node.close()
         rospy.loginfo("Message Dispatch shutdown (interrupt)")
\ No newline at end of file
diff --git a/ros_acomms/src/tdma_advanced_node.py b/ros_acomms/src/tdma_advanced_node.py
index 378ee5db..fde438ba 100755
--- a/ros_acomms/src/tdma_advanced_node.py
+++ b/ros_acomms/src/tdma_advanced_node.py
@@ -324,11 +324,12 @@ class TdmaAdvancedMacNode(TdmaMacNode):
 
         return sent_modem_pings, sent_transponder_ping, nav_ping_duration_sec
 
+
 if __name__ == "__main__":
     try:
         tdma_state_node = TdmaAdvancedMacNode()
-
+        rospy.loginfo("tdma_advanced_node shutdown")
     except rospy.ROSInterruptException:
-        rospy.loginfo("tdma_node shutdown (interrupt)")
+        rospy.loginfo("tdma_advanced_node shutdown (interrupt)")
 
 
diff --git a/ros_acomms/src/tdma_node.py b/ros_acomms/src/tdma_node.py
index 442f1226..2053a3a0 100755
--- a/ros_acomms/src/tdma_node.py
+++ b/ros_acomms/src/tdma_node.py
@@ -308,7 +308,7 @@ if __name__ == "__main__":
     import traceback
     try:
         tdma_state_node = TdmaMacNode()
-
+        rospy.loginfo("tdma_node shutdown")
     except rospy.ROSInterruptException:
         rospy.loginfo("tdma_node shutdown (interrupt)")
 
diff --git a/ros_acomms/src/tdma_scripted_node.py b/ros_acomms/src/tdma_scripted_node.py
index 651e3717..a90c6feb 100755
--- a/ros_acomms/src/tdma_scripted_node.py
+++ b/ros_acomms/src/tdma_scripted_node.py
@@ -179,11 +179,12 @@ class TdmaScriptedMacNode(TdmaAdvancedMacNode):
                 rate.sleep()
                 continue
 
+
 if __name__ == "__main__":
     try:
         tdma_state_node = TdmaScriptedMacNode()
-
+        rospy.loginfo("tdma_scripted_node shutdown (interrupt)")
     except rospy.ROSInterruptException:
-        rospy.loginfo("tdma_node shutdown (interrupt)")
+        rospy.loginfo("tdma_scripted_node shutdown (interrupt)")
 
 
diff --git a/ros_acomms/src/version_node.py b/ros_acomms/src/version_node.py
index 483dfdbe..e9d92e22 100755
--- a/ros_acomms/src/version_node.py
+++ b/ros_acomms/src/version_node.py
@@ -47,6 +47,6 @@ if __name__ == "__main__":
         display_version_node.getAcomms()
         display_version_node.getLtCodecs()
         display_version_node.getPyAcomms()
-
+        rospy.loginfo("version_node shutdown")
     except rospy.ROSInterruptException:
         rospy.loginfo("version_node shutdown (interrupt)")
diff --git a/ros_acomms_modeling/src/clock_generator.py b/ros_acomms_modeling/src/clock_generator.py
index d7bae9d9..8cf554ab 100755
--- a/ros_acomms_modeling/src/clock_generator.py
+++ b/ros_acomms_modeling/src/clock_generator.py
@@ -34,5 +34,6 @@ class ClockGenerator:
 if __name__ == '__main__':
     try:
         ClockGenerator()
+        rospy.loginfo("clock_generator shutdown")
     except rospy.ROSInterruptException:
-        pass
+        rospy.loginfo("clock_generator shutdown (interrupt)")
diff --git a/ros_acomms_modeling/src/modem_location_sim_node.py b/ros_acomms_modeling/src/modem_location_sim_node.py
index ee3eac2a..0990e409 100755
--- a/ros_acomms_modeling/src/modem_location_sim_node.py
+++ b/ros_acomms_modeling/src/modem_location_sim_node.py
@@ -31,5 +31,6 @@ class ModemLocationSimNode:
 if __name__ == '__main__':
     try:
         node = ModemLocationSimNode()
+        rospy.loginfo("ModemLocationSimNode shutdown")
     except rospy.ROSInterruptException:
         rospy.loginfo("ModemLocationSimNode shutdown (interrupt)")
diff --git a/ros_acomms_modeling/src/modem_sim_node.py b/ros_acomms_modeling/src/modem_sim_node.py
index 08fed9b9..f9594fc0 100755
--- a/ros_acomms_modeling/src/modem_sim_node.py
+++ b/ros_acomms_modeling/src/modem_sim_node.py
@@ -864,7 +864,6 @@ class ModemSimNode(object):
 if __name__ == '__main__':
     try:
         node = ModemSimNode()
-        rospy.loginfo("MODEM %d: Sim Node started", node.src)
-
+        rospy.loginfo("Modem Sim Node shutdown")
     except rospy.ROSInterruptException:
-        rospy.loginfo("MODEM: Sim Node shutdown (interrupt)")
+        rospy.loginfo("Modem Sim Node shutdown (interrupt)")
diff --git a/ros_acomms_modeling/src/sim_packet_performance_node.py b/ros_acomms_modeling/src/sim_packet_performance_node.py
index c4e0ea50..60ea28a1 100755
--- a/ros_acomms_modeling/src/sim_packet_performance_node.py
+++ b/ros_acomms_modeling/src/sim_packet_performance_node.py
@@ -114,7 +114,6 @@ class SimPacketPerformanceNode(object):
 if __name__ == '__main__':
     try:
         node = SimPacketPerformanceNode()
-
+        rospy.loginfo("sim_packet_performance_node shutdown")
     except rospy.ROSInterruptException:
-        node.close()
         rospy.loginfo("sim_packet_performance_node shutdown (interrupt)")
diff --git a/ros_acomms_modeling/src/sim_transmission_loss_node.py b/ros_acomms_modeling/src/sim_transmission_loss_node.py
index cd96a8d3..4f811851 100755
--- a/ros_acomms_modeling/src/sim_transmission_loss_node.py
+++ b/ros_acomms_modeling/src/sim_transmission_loss_node.py
@@ -261,7 +261,6 @@ class SimTransmissionLossNode(object):
 if __name__ == '__main__':
     try:
         node = SimTransmissionLossNode()
-
+        rospy.loginfo("sim_transmission_loss_node shutdown")
     except rospy.ROSInterruptException:
-        node.close()
         rospy.loginfo("sim_transmission_loss_node shutdown (interrupt)")
diff --git a/ros_acomms_modeling/src/simple_noise_model_node.py b/ros_acomms_modeling/src/simple_noise_model_node.py
index 0fbb3c3d..21d21090 100755
--- a/ros_acomms_modeling/src/simple_noise_model_node.py
+++ b/ros_acomms_modeling/src/simple_noise_model_node.py
@@ -30,7 +30,6 @@ class SimpleNoiseModelNode(object):
 if __name__ == '__main__':
     try:
         node = SimpleNoiseModelNode()
-
+        rospy.loginfo("simple_noise_model shutdown")
     except rospy.ROSInterruptException:
-        node.close()
-        rospy.loginfo("sim_packet_performance_node shutdown (interrupt)")
+        rospy.loginfo("simple_noise_model shutdown (interrupt)")
-- 
GitLab