diff options
author | Tony Asleson <tasleson@redhat.com> | 2016-11-01 17:50:10 -0500 |
---|---|---|
committer | Tony Asleson <tasleson@redhat.com> | 2016-11-02 16:38:49 -0500 |
commit | 38dd79307a51faedb75e092a7913781e6eb88902 (patch) | |
tree | 5b36e42adc4f75a18ee64fdba6934b6f8932bb8a | |
parent | 24803bbaadd8bd497e2ca337786b01725df61736 (diff) | |
download | lvm2-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.py | 33 | ||||
-rw-r--r-- | daemons/lvmdbusd/main.py | 2 |
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: |