auto-t: hwsim.py: turn Hwsim into singleton (per-namespace)

This prevents reallocation of new Hwsim classes on each call if one
already exists. This is a bit more efficient on memory.
This commit is contained in:
James Prestwood 2021-08-26 13:33:31 -07:00 committed by Denis Kenzior
parent 4657bd55f5
commit 1a01486170
1 changed files with 19 additions and 0 deletions

View File

@ -3,6 +3,7 @@ import dbus
import sys import sys
import collections import collections
from weakref import WeakValueDictionary
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
from enum import Enum from enum import Enum
@ -297,7 +298,25 @@ class RadioList(collections.Mapping):
return obj return obj
class Hwsim(iwd.AsyncOpAbstract): class Hwsim(iwd.AsyncOpAbstract):
_instances = WeakValueDictionary()
def __new__(cls, namespace=ctx):
name = namespace.name
if name not in cls._instances.keys():
obj = object.__new__(cls)
obj._initialized = False
cls._instances[name] = obj
return cls._instances[name]
def __init__(self, namespace=ctx): def __init__(self, namespace=ctx):
if self._initialized:
return
self._initialized = True
self._bus = namespace.get_bus() self._bus = namespace.get_bus()
self._rule_manager_if = dbus.Interface( self._rule_manager_if = dbus.Interface(