Fix files and printer memory leaks fixes #479

This commit is contained in:
alfrix 2022-03-20 12:11:41 -03:00
parent 4899701ae3
commit 48b2ef513f
4 changed files with 35 additions and 11 deletions

View File

@ -6,16 +6,12 @@ gi.require_version("Gtk", "3.0")
from gi.repository import GLib
class KlippyFiles():
thumbnail_dir = "/tmp/.KS-thumbnails"
def __init__(self, screen):
self.loop = None
self._poll_task = None
self._screen = screen
self.callbacks = []
self.files = {}
self.filelist = []
self.metadata_timeout = {}
self.thumbnail_dir = "/tmp/.KS-thumbnails"
if not os.path.exists(self.thumbnail_dir):
os.makedirs(self.thumbnail_dir)
@ -30,6 +26,15 @@ class KlippyFiles():
self.gcodes_path = vsd['path']
logging.info("Gcodes path: %s" % self.gcodes_path)
def reset(self):
self.run_callbacks()
self.callbacks = None
self.files = None
self.filelist = None
self.thumbnail_dir = None
self.gcodes_path = None
self._screen = None
def _callback(self, result, method, params):
if method == "server.files.list":
if "result" in result and isinstance(result['result'], list):
@ -183,11 +188,9 @@ class KlippyFiles():
def run_callbacks(self, newfiles=[], deletedfiles=[], mods=[]):
if len(self.callbacks) <= 0:
return
return False
for cb in self.callbacks:
GLib.idle_add(cb, newfiles, deletedfiles, mods)
return False
def get_file_list(self):
@ -196,5 +199,4 @@ class KlippyFiles():
def get_file_info(self, filename):
if filename not in self.files:
return {"path": None, "modified": 0, "size": 0}
return self.files[filename]

View File

@ -30,6 +30,24 @@ class Printer:
self.power_devices = {}
self.store_timeout = False
def reset(self):
self.state = None
self.state_cb = None
self.data = None
self.devices = None
self.power_devices = None
self.state_callbacks = None
self.tools = None
self.toolcount = None
self.extrudercount = None
self.tempdevcount = None
self.fancount = None
GLib.source_remove(self.store_timeout)
self.store_timeout = None
self.config = None
self.klipper = None
self.tempstore = None
def reinit(self, printer_info, data):
logging.debug("Moonraker object status: %s" % data)
self.config = data['configfile']['config']

View File

@ -143,7 +143,7 @@ class BasePanel(ScreenPanel):
for child in self.control['temp_box'].get_children():
self.control['temp_box'].remove(child)
if show is False:
if show is False or self._printer.get_temp_store_devices() is None:
return
for device in self._printer.get_temp_store_devices():

View File

@ -165,11 +165,15 @@ class KlipperScreen(Gtk.Window):
self.base_panel.show_macro_shortcut(self._config.get_main_config_option('side_macro_shortcut'))
return
# Cleanup
self.printer_select_callbacks = []
self.printer_select_prepanel = None
if self.files is not None:
self.files.reset()
self.files = None
if self.printer is not None:
self.printer.reset()
self.printer = None
for printer in self._config.get_printers():
pname = list(printer)[0]