summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Asleson <tasleson@redhat.com>2016-11-01 17:50:10 -0500
committerTony Asleson <tasleson@redhat.com>2016-11-02 16:38:49 -0500
commit38dd79307a51faedb75e092a7913781e6eb88902 (patch)
tree5b36e42adc4f75a18ee64fdba6934b6f8932bb8a
parent24803bbaadd8bd497e2ca337786b01725df61736 (diff)
downloadlvm2-38dd79307a51faedb75e092a7913781e6eb88902.tar.gz
lvmdbusd: Execute load in main thread
We will fetch the lvm state in non-main thread and only process the new data with the main thread to prevent hanging the main thread event loop. ref. https://bugs.freedesktop.org/show_bug.cgi?id=98521
-rw-r--r--daemons/lvmdbusd/fetch.py33
-rw-r--r--daemons/lvmdbusd/main.py2
2 files changed, 26 insertions, 9 deletions
diff --git a/daemons/lvmdbusd/fetch.py b/daemons/lvmdbusd/fetch.py
index 51f130f0d..7626460d8 100644
--- a/daemons/lvmdbusd/fetch.py
+++ b/daemons/lvmdbusd/fetch.py
@@ -11,20 +11,37 @@ from .pv import load_pvs
from .vg import load_vgs
from .lv import load_lvs
from . import cfg
+from .utils import MThreadRunner, log_debug
-def load(refresh=True, emit_signal=True, cache_refresh=True, log=True):
+def _main_thread_load(refresh=True, emit_signal=True):
num_total_changes = 0
+ num_total_changes += load_pvs(
+ refresh=refresh,
+ emit_signal=emit_signal,
+ cache_refresh=False)[1]
+ num_total_changes += load_vgs(
+ refresh=refresh,
+ emit_signal=emit_signal,
+ cache_refresh=False)[1]
+ num_total_changes += load_lvs(
+ refresh=refresh,
+ emit_signal=emit_signal,
+ cache_refresh=False)[1]
+
+ return num_total_changes
+
+
+def load(refresh=True, emit_signal=True, cache_refresh=True, log=True,
+ need_main_thread=True):
# Go through and load all the PVs, VGs and LVs
if cache_refresh:
cfg.db.refresh(log)
- num_total_changes += load_pvs(refresh=refresh, emit_signal=emit_signal,
- cache_refresh=False)[1]
- num_total_changes += load_vgs(refresh=refresh, emit_signal=emit_signal,
- cache_refresh=False)[1]
- num_total_changes += load_lvs(refresh=refresh, emit_signal=emit_signal,
- cache_refresh=False)[1]
+ if need_main_thread:
+ rc = MThreadRunner(_main_thread_load, refresh, emit_signal).done()
+ else:
+ rc = _main_thread_load(refresh, emit_signal)
- return num_total_changes
+ return rc
diff --git a/daemons/lvmdbusd/main.py b/daemons/lvmdbusd/main.py
index 2dca7031b..93e035f01 100644
--- a/daemons/lvmdbusd/main.py
+++ b/daemons/lvmdbusd/main.py
@@ -162,7 +162,7 @@ def main():
# Using a thread to process requests.
thread_list.append(threading.Thread(target=process_request))
- cfg.load(refresh=False, emit_signal=False)
+ cfg.load(refresh=False, emit_signal=False, need_main_thread=False)
cfg.loop = GLib.MainLoop()
for process in thread_list: