| Index: build/android/pylib/device/device_blacklist.py
|
| diff --git a/build/android/pylib/device/device_blacklist.py b/build/android/pylib/device/device_blacklist.py
|
| index b2124a74fac663a43b5ae6f1b1e1ddb7b2b7c55c..a141d62b81b828f17a243dbb70adbe8772ddba30 100644
|
| --- a/build/android/pylib/device/device_blacklist.py
|
| +++ b/build/android/pylib/device/device_blacklist.py
|
| @@ -4,6 +4,7 @@
|
|
|
| import json
|
| import os
|
| +import threading
|
|
|
| from pylib import constants
|
| _BLACKLIST_JSON = os.path.join(
|
| @@ -11,17 +12,22 @@ _BLACKLIST_JSON = os.path.join(
|
| os.environ.get('CHROMIUM_OUT_DIR', 'out'),
|
| 'bad_devices.json')
|
|
|
| +# Note that this only protects against concurrent accesses to the blacklist
|
| +# within a process.
|
| +_blacklist_lock = threading.RLock()
|
| +
|
| def ReadBlacklist():
|
| """Reads the blacklist from the _BLACKLIST_JSON file.
|
|
|
| Returns:
|
| A list containing bad devices.
|
| """
|
| - if not os.path.exists(_BLACKLIST_JSON):
|
| - return []
|
| + with _blacklist_lock:
|
| + if not os.path.exists(_BLACKLIST_JSON):
|
| + return []
|
|
|
| - with open(_BLACKLIST_JSON, 'r') as f:
|
| - return json.load(f)
|
| + with open(_BLACKLIST_JSON, 'r') as f:
|
| + return json.load(f)
|
|
|
|
|
| def WriteBlacklist(blacklist):
|
| @@ -30,8 +36,9 @@ def WriteBlacklist(blacklist):
|
| Args:
|
| blacklist: list of bad devices to write to the _BLACKLIST_JSON file.
|
| """
|
| - with open(_BLACKLIST_JSON, 'w') as f:
|
| - json.dump(list(set(blacklist)), f)
|
| + with _blacklist_lock:
|
| + with open(_BLACKLIST_JSON, 'w') as f:
|
| + json.dump(list(set(blacklist)), f)
|
|
|
|
|
| def ExtendBlacklist(devices):
|
| @@ -40,13 +47,15 @@ def ExtendBlacklist(devices):
|
| Args:
|
| devices: list of bad devices to be added to the _BLACKLIST_JSON file.
|
| """
|
| - blacklist = ReadBlacklist()
|
| - blacklist.extend(devices)
|
| - WriteBlacklist(blacklist)
|
| + with _blacklist_lock:
|
| + blacklist = ReadBlacklist()
|
| + blacklist.extend(devices)
|
| + WriteBlacklist(blacklist)
|
|
|
|
|
| def ResetBlacklist():
|
| """Erases the _BLACKLIST_JSON file if it exists."""
|
| - if os.path.exists(_BLACKLIST_JSON):
|
| - os.remove(_BLACKLIST_JSON)
|
| + with _blacklist_lock:
|
| + if os.path.exists(_BLACKLIST_JSON):
|
| + os.remove(_BLACKLIST_JSON)
|
|
|
|
|