diff --git a/linux-ramdump-parser-v2/debug_image_v2.py b/linux-ramdump-parser-v2/debug_image_v2.py old mode 100755 new mode 100644 index 37d552508a9a12e7e21e57072d2afc005f99dd0d..061f1fd3c4969bc159b5bfd84929d11b73b43182 --- a/linux-ramdump-parser-v2/debug_image_v2.py +++ b/linux-ramdump-parser-v2/debug_image_v2.py @@ -15,8 +15,10 @@ import re import shutil import os import platform +import random import subprocess import sys +import time from dcc import DccRegDump, DccSramDump from pmic import PmicRegDump @@ -288,14 +290,38 @@ class DebugImage_v2(): else: return - port = 12345 + port = None + server_proc = None + qtf_success = False + max_tries = 3 qtf_dir = os.path.join(out_dir, 'qtf') workspace = os.path.join(qtf_dir, 'qtf.workspace') qtf_out = os.path.join(out_dir, 'qtf.txt') chipset = 'msm' + str(ram_dump.hw_id) hlos = 'LA' - p = subprocess.Popen([qtf_path, '-s', '{0}'.format(port)]) + # Resolve any port collisions with other running qtf_server instances + for tries in range(max_tries): + port = random.randint(12000, 13000) + server_proc = subprocess.Popen( + [qtf_path, '-s', '{0}'.format(port)], stderr=subprocess.PIPE) + time.sleep(1) + server_proc.poll() + if server_proc.returncode == 1: + server_proc.terminate() + continue + else: + qtf_success = True + break + if not qtf_success: + server_proc.terminate() + print_out_str('!!! Could not open a QTF server instance with a ' + 'unique port (last port tried: ' + '{0})'.format(str(port))) + print_out_str('!!! Please kill all currently running qtf_server ' + 'processes and try again') + return + subprocess.call('{0} -c {1} new workspace {2} {3} {4}'.format(qtf_path, port, qtf_dir, chipset, hlos)) self.collect_ftrace_format(ram_dump) @@ -303,8 +329,9 @@ class DebugImage_v2(): subprocess.call('{0} -c {1} open workspace {2}'.format(qtf_path, port, workspace)) subprocess.call('{0} -c {1} open bin {2}'.format(qtf_path, port, trace_file)) subprocess.call('{0} -c {1} stream trace table {2}'.format(qtf_path, port, qtf_out)) + subprocess.call('{0} -c {1} close'.format(qtf_path, port)) subprocess.call('{0} -c {1} exit'.format(qtf_path, port)) - p.communicate('quit') + server_proc.communicate('quit') def parse_dcc(self, ram_dump): out_dir = ram_dump.outdir