mirror of
https://github.com/django/daphne.git
synced 2024-11-22 07:56:34 +03:00
Only set disconnected time when it is not already set (#237)
Fixes a memory leak where the time would never expire, as well as an additional case where send is called on an already-cleaned-up instance.
This commit is contained in:
parent
de15dcb4d1
commit
c4125c66d4
|
@ -176,7 +176,11 @@ class Server(object):
|
||||||
|
|
||||||
def protocol_disconnected(self, protocol):
|
def protocol_disconnected(self, protocol):
|
||||||
# Set its disconnected time (the loops will come and clean it up)
|
# Set its disconnected time (the loops will come and clean it up)
|
||||||
self.connections[protocol]["disconnected"] = time.time()
|
# Do not set it if it is already set. Overwriting it might
|
||||||
|
# cause it to never be cleaned up.
|
||||||
|
# See https://github.com/django/channels/issues/1181
|
||||||
|
if "disconnected" not in self.connections[protocol]:
|
||||||
|
self.connections[protocol]["disconnected"] = time.time()
|
||||||
|
|
||||||
### Internal event/message handling
|
### Internal event/message handling
|
||||||
|
|
||||||
|
@ -208,8 +212,10 @@ class Server(object):
|
||||||
"""
|
"""
|
||||||
Coroutine that jumps the reply message from asyncio to Twisted
|
Coroutine that jumps the reply message from asyncio to Twisted
|
||||||
"""
|
"""
|
||||||
# Don't do anything if the connection is closed
|
# Don't do anything if the connection is closed or does not exist
|
||||||
if self.connections[protocol].get("disconnected", None):
|
if protocol not in self.connections or self.connections[protocol].get(
|
||||||
|
"disconnected", None
|
||||||
|
):
|
||||||
return
|
return
|
||||||
self.check_headers_type(message)
|
self.check_headers_type(message)
|
||||||
# Let the protocol handle it
|
# Let the protocol handle it
|
||||||
|
|
Loading…
Reference in New Issue
Block a user