in glean-core/python/glean/glean.py [0:0]
def _reset(cls) -> None:
"""
Resets the Glean singleton.
"""
# TODO: 1594184 Send the metrics ping
log.debug("Resetting Glean")
# Wait for the subprocess to complete. We only need to do this if
# we know we are going to be deleting the data directory.
if cls._destroy_data_dir and cls._data_dir.exists():
ProcessDispatcher._wait_for_last_process()
# Destroy the Glean object.
# Importantly on Windows, this closes the handle to the database so
# that the data directory can be deleted without a multiple access
# violation.
_uniffi.glean_test_destroy_glean(False)
_uniffi.glean_set_test_mode(False)
cls._init_finished = False
cls._initialized = False
cls._testing_mode = False
# Remove the atexit handler or it will get called multiple times at
# exit.
atexit.unregister(cls._reset)
if cls._destroy_data_dir and cls._data_dir.exists():
# This needs to be run in the same one-at-a-time process as the
# PingUploadWorker to avoid a race condition. This will block the
# main thread waiting for all pending uploads to complete, but this
# only happens during testing when the data directory is a
# temporary directory, so there is no concern about delaying
# application shutdown here.
p = ProcessDispatcher.dispatch(_rmtree, (str(cls._data_dir),))
p.wait()