cancel callLater on error or timeout
This commit is contained in:
parent
df78f7ff9f
commit
b4bc5e2110
1 changed files with 9 additions and 1 deletions
|
@ -173,6 +173,13 @@ class KademliaProtocol(protocol.DatagramProtocol):
|
||||||
# Transmit the data
|
# Transmit the data
|
||||||
self._send(encodedMsg, msg.id, (contact.address, contact.port))
|
self._send(encodedMsg, msg.id, (contact.address, contact.port))
|
||||||
self._sentMessages[msg.id] = (contact.id, df, timeoutCall, method, args)
|
self._sentMessages[msg.id] = (contact.id, df, timeoutCall, method, args)
|
||||||
|
|
||||||
|
def cancel(err):
|
||||||
|
if timeoutCall.cancelled or timeoutCall.called:
|
||||||
|
return err
|
||||||
|
timeoutCall.cancel()
|
||||||
|
|
||||||
|
df.addErrback(cancel)
|
||||||
return df
|
return df
|
||||||
|
|
||||||
def startProtocol(self):
|
def startProtocol(self):
|
||||||
|
@ -336,7 +343,8 @@ class KademliaProtocol(protocol.DatagramProtocol):
|
||||||
self._call_later_list[key] = delayed_call
|
self._call_later_list[key] = delayed_call
|
||||||
|
|
||||||
def _write_and_remove(self, key, txData, address):
|
def _write_and_remove(self, key, txData, address):
|
||||||
del self._call_later_list[key]
|
if key in self._call_later_list:
|
||||||
|
del self._call_later_list[key]
|
||||||
if self.transport:
|
if self.transport:
|
||||||
try:
|
try:
|
||||||
self.transport.write(txData, address)
|
self.transport.write(txData, address)
|
||||||
|
|
Loading…
Reference in a new issue