mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Avoid shutdown delays when emulated_hue is enabled (#38472)
We would have to wait for the select to timeout for emulated_hue upnp thread to shutdown We now close the socket so the select unblocks right away
This commit is contained in:
parent
34b911203c
commit
03a0114e10
@ -74,11 +74,14 @@ class UPNPResponderThread(threading.Thread):
|
|||||||
self.upnp_bind_multicast = upnp_bind_multicast
|
self.upnp_bind_multicast = upnp_bind_multicast
|
||||||
self.advertise_ip = advertise_ip
|
self.advertise_ip = advertise_ip
|
||||||
self.advertise_port = advertise_port
|
self.advertise_port = advertise_port
|
||||||
|
self._ssdp_socket = None
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Run the server."""
|
"""Run the server."""
|
||||||
# Listen for UDP port 1900 packets sent to SSDP multicast address
|
# Listen for UDP port 1900 packets sent to SSDP multicast address
|
||||||
ssdp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
self._ssdp_socket = ssdp_socket = socket.socket(
|
||||||
|
socket.AF_INET, socket.SOCK_DGRAM
|
||||||
|
)
|
||||||
ssdp_socket.setblocking(False)
|
ssdp_socket.setblocking(False)
|
||||||
|
|
||||||
# Required for receiving multicast
|
# Required for receiving multicast
|
||||||
@ -101,7 +104,6 @@ class UPNPResponderThread(threading.Thread):
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
if self._interrupted:
|
if self._interrupted:
|
||||||
clean_socket_close(ssdp_socket)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -114,7 +116,6 @@ class UPNPResponderThread(threading.Thread):
|
|||||||
continue
|
continue
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
if self._interrupted:
|
if self._interrupted:
|
||||||
clean_socket_close(ssdp_socket)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
@ -138,6 +139,8 @@ class UPNPResponderThread(threading.Thread):
|
|||||||
"""Stop the server."""
|
"""Stop the server."""
|
||||||
# Request for server
|
# Request for server
|
||||||
self._interrupted = True
|
self._interrupted = True
|
||||||
|
if self._ssdp_socket:
|
||||||
|
clean_socket_close(self._ssdp_socket)
|
||||||
self.join()
|
self.join()
|
||||||
|
|
||||||
def _handle_request(self, data):
|
def _handle_request(self, data):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user