Ensure storage write consume the data under the lock (#35889)

If two writes trigger at the same time the data would already
be consumed.
This commit is contained in:
J. Nick Koston 2020-05-21 03:27:40 -05:00 committed by GitHub
parent 4805723a3f
commit 6d03496372
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -200,14 +200,19 @@ class Store:
async def _async_handle_write_data(self, *_args):
"""Handle writing the config."""
data = self._data
if "data_func" in data:
data["data"] = data.pop("data_func")()
self._data = None
async with self._write_lock:
if self._data is None:
# Another write already consumed the data
return
data = self._data
if "data_func" in data:
data["data"] = data.pop("data_func")()
self._data = None
try:
await self.hass.async_add_executor_job(
self._write_data, self.path, data