summaryrefslogtreecommitdiff
path: root/util/ec3po/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/ec3po/interpreter.py')
-rw-r--r--util/ec3po/interpreter.py43
1 files changed, 27 insertions, 16 deletions
diff --git a/util/ec3po/interpreter.py b/util/ec3po/interpreter.py
index 31079fb908..b71607f254 100644
--- a/util/ec3po/interpreter.py
+++ b/util/ec3po/interpreter.py
@@ -20,6 +20,7 @@ import logging
import os
import Queue
import select
+import sys
COMMAND_RETRIES = 3 # Number of attempts to retry a command.
@@ -312,19 +313,29 @@ def StartLoop(interp):
Args:
interp: An Interpreter object that has been properly initialised.
"""
- while True:
- readable, writeable, _ = select.select(interp.inputs, interp.outputs, [])
-
- for obj in readable:
- # Handle any debug prints from the EC.
- if obj is interp.ec_uart_pty:
- interp.HandleECData()
-
- # Handle any commands from the user.
- elif obj is interp.cmd_pipe:
- interp.HandleUserData()
-
- for obj in writeable:
- # Send a command to the EC.
- if obj is interp.ec_uart_pty:
- interp.SendCmdToEC()
+ try:
+ while True:
+ readable, writeable, _ = select.select(interp.inputs, interp.outputs, [])
+
+ for obj in readable:
+ # Handle any debug prints from the EC.
+ if obj is interp.ec_uart_pty:
+ interp.HandleECData()
+
+ # Handle any commands from the user.
+ elif obj is interp.cmd_pipe:
+ interp.HandleUserData()
+
+ for obj in writeable:
+ # Send a command to the EC.
+ if obj is interp.ec_uart_pty:
+ interp.SendCmdToEC()
+
+ finally:
+ # Close pipes.
+ interp.cmd_pipe.close()
+ interp.dbg_pipe.close()
+ # Close file descriptor.
+ interp.ec_uart_pty.close()
+ # Exit.
+ sys.exit(0)