diff --git a/src/zeroconf/_handlers/record_manager.pxd b/src/zeroconf/_handlers/record_manager.pxd index 5be2c283b..d4e068c2e 100644 --- a/src/zeroconf/_handlers/record_manager.pxd +++ b/src/zeroconf/_handlers/record_manager.pxd @@ -6,12 +6,11 @@ from .._dns cimport DNSQuestion, DNSRecord from .._protocol.incoming cimport DNSIncoming from .._updates cimport RecordUpdateListener from .._utils.time cimport current_time_millis - +from .._record_update cimport RecordUpdate cdef cython.float _DNS_PTR_MIN_TTL cdef cython.uint _TYPE_PTR cdef object _ADDRESS_RECORD_TYPES -cdef object RecordUpdate cdef bint TYPE_CHECKING cdef object _TYPE_PTR @@ -31,6 +30,7 @@ cdef class RecordManager: record=DNSRecord, answers=cython.list, maybe_entry=DNSRecord, + rec_update=RecordUpdate ) cpdef void async_updates_from_response(self, DNSIncoming msg) diff --git a/src/zeroconf/_handlers/record_manager.py b/src/zeroconf/_handlers/record_manager.py index 0bb049966..5f25ceb11 100644 --- a/src/zeroconf/_handlers/record_manager.py +++ b/src/zeroconf/_handlers/record_manager.py @@ -120,11 +120,15 @@ def async_updates_from_response(self, msg: DNSIncoming) -> None: address_adds.append(record) else: other_adds.append(record) - updates.append(RecordUpdate(record, maybe_entry)) + rec_update = RecordUpdate.__new__(RecordUpdate) + rec_update._fast_init(record, maybe_entry) + updates.append(rec_update) # This is likely a goodbye since the record is # expired and exists in the cache elif maybe_entry is not None: - updates.append(RecordUpdate(record, maybe_entry)) + rec_update = RecordUpdate.__new__(RecordUpdate) + rec_update._fast_init(record, maybe_entry) + updates.append(rec_update) removes.add(record) if unique_types: diff --git a/src/zeroconf/_record_update.pxd b/src/zeroconf/_record_update.pxd index d1b18cbe0..1562299b2 100644 --- a/src/zeroconf/_record_update.pxd +++ b/src/zeroconf/_record_update.pxd @@ -8,3 +8,5 @@ cdef class RecordUpdate: cdef public DNSRecord new cdef public DNSRecord old + + cdef void _fast_init(self, object new, object old) diff --git a/src/zeroconf/_record_update.py b/src/zeroconf/_record_update.py index 880b7a1b2..912ab6f1d 100644 --- a/src/zeroconf/_record_update.py +++ b/src/zeroconf/_record_update.py @@ -24,12 +24,18 @@ from ._dns import DNSRecord +_DNSRecord = DNSRecord + class RecordUpdate: __slots__ = ("new", "old") - def __init__(self, new: DNSRecord, old: Optional[DNSRecord] = None): + def __init__(self, new: DNSRecord, old: Optional[DNSRecord] = None) -> None: """RecordUpdate represents a change in a DNS record.""" + self._fast_init(new, old) + + def _fast_init(self, new: _DNSRecord, old: Optional[_DNSRecord]) -> None: + """Fast init for RecordUpdate.""" self.new = new self.old = old