summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDoug Zongker <dougz@google.com>2014-08-05 10:39:37 -0700
committerDoug Zongker <dougz@google.com>2014-08-05 10:39:37 -0700
commitf83400896de5e8bc2b21a0dce98382d9ed0ab537 (patch)
treece09db088625b5f0f3c1f7ea2fcd74388f41aaa0 /tools
parent56d91dd07f96039344d6976da5d985d2508c9365 (diff)
downloadreplicant_build-f83400896de5e8bc2b21a0dce98382d9ed0ab537.zip
replicant_build-f83400896de5e8bc2b21a0dce98382d9ed0ab537.tar.gz
replicant_build-f83400896de5e8bc2b21a0dce98382d9ed0ab537.tar.bz2
add 5 minute timeout on binary patch construction
When making bsdiff/imgdiff patches, give up after 5 minutes. (On certain large files it can take hours to build a patch, if it ever even completes.) Change-Id: I123c06f8194f85f6f4e640f7eb31c7746f76ba4d
Diffstat (limited to 'tools')
-rw-r--r--tools/releasetools/common.py22
-rwxr-xr-xtools/releasetools/ota_from_target_files52
2 files changed, 50 insertions, 24 deletions
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 15964b1..50ef451 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -900,10 +900,26 @@ class Difference(object):
cmd.append(ttemp.name)
cmd.append(ptemp.name)
p = Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- _, err = p.communicate()
+ err = []
+ def run():
+ _, e = p.communicate()
+ if e: err.append(e)
+ th = threading.Thread(target=run)
+ th.start()
+ th.join(timeout=300) # 5 mins
+ if th.is_alive():
+ print "WARNING: diff command timed out"
+ p.terminate()
+ th.join(5)
+ if th.is_alive():
+ p.kill()
+ th.join()
+
if err or p.returncode != 0:
- print "WARNING: failure running %s:\n%s\n" % (diff_program, err)
- return None
+ print "WARNING: failure running %s:\n%s\n" % (
+ diff_program, "".join(err))
+ self.patch = None
+ return None, None, None
diff = ptemp.read()
finally:
ptemp.close()
diff --git a/tools/releasetools/ota_from_target_files b/tools/releasetools/ota_from_target_files
index f848fd5..9f70167 100755
--- a/tools/releasetools/ota_from_target_files
+++ b/tools/releasetools/ota_from_target_files
@@ -853,19 +853,24 @@ else if get_stage("%(bcb_dev)s", "stage") != "3/3" then
GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict))
if updating_boot:
+ boot_type, boot_device = common.GetTypeAndDevice("/boot", OPTIONS.info_dict)
d = common.Difference(target_boot, source_boot)
_, _, d = d.ComputePatch()
- print "boot target: %d source: %d diff: %d" % (
- target_boot.size, source_boot.size, len(d))
+ if d is None:
+ include_full_boot = True
+ common.ZipWriteStr(output_zip, "boot.img", target_boot.data)
+ else:
+ include_full_boot = False
- common.ZipWriteStr(output_zip, "patch/boot.img.p", d)
+ print "boot target: %d source: %d diff: %d" % (
+ target_boot.size, source_boot.size, len(d))
- boot_type, boot_device = common.GetTypeAndDevice("/boot", OPTIONS.info_dict)
+ common.ZipWriteStr(output_zip, "patch/boot.img.p", d)
- script.PatchCheck("%s:%s:%d:%s:%d:%s" %
- (boot_type, boot_device,
- source_boot.size, source_boot.sha1,
- target_boot.size, target_boot.sha1))
+ script.PatchCheck("%s:%s:%d:%s:%d:%s" %
+ (boot_type, boot_device,
+ source_boot.size, source_boot.sha1,
+ target_boot.size, target_boot.sha1))
device_specific.IncrementalOTA_VerifyEnd()
@@ -906,19 +911,24 @@ else
if not OPTIONS.two_step:
if updating_boot:
- # Produce the boot image by applying a patch to the current
- # contents of the boot partition, and write it back to the
- # partition.
- script.Print("Patching boot image...")
- script.ShowProgress(0.1, 10)
- script.ApplyPatch("%s:%s:%d:%s:%d:%s"
- % (boot_type, boot_device,
- source_boot.size, source_boot.sha1,
- target_boot.size, target_boot.sha1),
- "-",
- target_boot.size, target_boot.sha1,
- source_boot.sha1, "patch/boot.img.p")
- print "boot image changed; including."
+ if include_full_boot:
+ print "boot image changed; including full."
+ script.Print("Installing boot image...")
+ script.WriteRawImage("/boot", "boot.img")
+ else:
+ # Produce the boot image by applying a patch to the current
+ # contents of the boot partition, and write it back to the
+ # partition.
+ print "boot image changed; including patch."
+ script.Print("Patching boot image...")
+ script.ShowProgress(0.1, 10)
+ script.ApplyPatch("%s:%s:%d:%s:%d:%s"
+ % (boot_type, boot_device,
+ source_boot.size, source_boot.sha1,
+ target_boot.size, target_boot.sha1),
+ "-",
+ target_boot.size, target_boot.sha1,
+ source_boot.sha1, "patch/boot.img.p")
else:
print "boot image unchanged; skipping."