Merge "relesetools: Enable releasetools_test in presubmit."
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 1c02da6..757c513 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -617,6 +617,9 @@
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/super.img)
 
 $(call add-clean-step, find $(PRODUCT_OUT) -type f -name "generated_*_image_info.txt" -print0 | xargs -0 rm -f)
+
+# Clean up libicuuc.so and libicui18n.so
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/libicu*)
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/target/product/base_system.mk b/target/product/base_system.mk
index 87076a9..46bf350 100644
--- a/target/product/base_system.mk
+++ b/target/product/base_system.mk
@@ -356,6 +356,7 @@
     showmap \
     sqlite3 \
     ss \
+    start_with_lockagent \
     strace \
     su \
     sanitizer-status \
diff --git a/target/product/runtime_libart.mk b/target/product/runtime_libart.mk
index dbb4b82..e08b56b 100644
--- a/target/product/runtime_libart.mk
+++ b/target/product/runtime_libart.mk
@@ -33,11 +33,6 @@
 PRODUCT_PACKAGES += \
     ext \
 
-# Libcore ICU. TODO(b/124218500): Remove them explicitly when the bug is resolved.
-PRODUCT_PACKAGES += \
-    libicui18n \
-    libicuuc \
-
 # Android Runtime APEX module.
 PRODUCT_PACKAGES += com.android.runtime
 PRODUCT_HOST_PACKAGES += com.android.runtime
diff --git a/tools/releasetools/blockimgdiff.py b/tools/releasetools/blockimgdiff.py
index 2e5f804..b23eef1 100644
--- a/tools/releasetools/blockimgdiff.py
+++ b/tools/releasetools/blockimgdiff.py
@@ -205,6 +205,8 @@
     self.clobbered_blocks = RangeSet()
     self.extended = RangeSet()
 
+    self.generator_lock = threading.Lock()
+
     self.hashtree_info = None
     if hashtree_info_generator:
       self.hashtree_info = hashtree_info_generator.Generate(self)
@@ -236,10 +238,13 @@
     self._file.close()
 
   def _GetRangeData(self, ranges):
-    for s, e in ranges:
-      self._file.seek(s * self.blocksize)
-      for _ in range(s, e):
-        yield self._file.read(self.blocksize)
+    # Use a lock to protect the generator so that we will not run two
+    # instances of this generator on the same object simultaneously.
+    with self.generator_lock:
+      for s, e in ranges:
+        self._file.seek(s * self.blocksize)
+        for _ in range(s, e):
+          yield self._file.read(self.blocksize)
 
   def RangeSha1(self, ranges):
     h = sha1()