Skip to content

Commit 75b0e35

Browse files
authored
[ros2component] Stop the standalone container when load fails (#269)
* Stop the standalone container when load fails This prevents zombie container processes from hanging around when a component fails to load. Closes: #260 Signed-off-by: Michael Carroll <[email protected]>
1 parent f84dd76 commit 75b0e35

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

ros2component/ros2component/verb/standalone.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import platform
16+
import signal
1517
import uuid
1618

1719
from ros2cli.node.direct import DirectNode
@@ -39,13 +41,21 @@ def main(self, *, args):
3941
container = run_standalone_container(container_node_name=args.container_node_name)
4042

4143
with DirectNode(args) as node:
42-
load_component_into_container(
43-
node=node, remote_container_node_name=args.container_node_name,
44-
package_name=args.package_name, plugin_name=args.plugin_name,
45-
node_name=args.node_name, node_namespace=args.node_namespace,
46-
log_level=args.log_level, remap_rules=args.remap_rules,
47-
parameters=args.parameters, extra_arguments=args.extra_arguments
48-
)
44+
try:
45+
load_component_into_container(
46+
node=node, remote_container_node_name=args.container_node_name,
47+
package_name=args.package_name, plugin_name=args.plugin_name,
48+
node_name=args.node_name, node_namespace=args.node_namespace,
49+
log_level=args.log_level, remap_rules=args.remap_rules,
50+
parameters=args.parameters, extra_arguments=args.extra_arguments
51+
)
52+
except RuntimeError as ex:
53+
# In case the component fails to load, kill the container.
54+
print('{}, interrupting container node'.format(ex))
55+
if platform.system() == 'Windows':
56+
container.send_signal(signal.CTRL_C_EVENT)
57+
else:
58+
container.send_signal(signal.SIGINT)
4959

5060
while container.returncode is None:
5161
try:

0 commit comments

Comments
 (0)