Skip to content

Commit f97b6cf

Browse files
committed
Fix path has already been removed warning, resolves #46
Fix SaltyRTC now requires Python >= 3.4.4 (since it uses `ensure_future`)
1 parent df4b9b3 commit f97b6cf

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

saltyrtc/server/protocol.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@
3737

3838

3939
class Path:
40-
__slots__ = ('_slots', 'log', 'initiator_key', 'number')
40+
__slots__ = ('_slots', 'log', 'initiator_key', 'number', 'attached')
4141

42-
def __init__(self, initiator_key, number):
42+
def __init__(self, initiator_key, number, attached=True):
4343
self._slots = {id_: None for id_ in available_slot_range()}
4444
self.log = util.get_logger('path.{}'.format(number))
4545
self.initiator_key = initiator_key
4646
self.number = number
47+
self.attached = attached
4748

4849
@property
4950
def empty(self):

saltyrtc/server/server.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ def handler(self, connection, ws_path):
246246

247247
# Remove client from path
248248
path.remove_client(client)
249+
self._server.paths.clean(path)
249250

250251
# Wait for the task loop to complete
251252
# Note: This will ensure all relay messages are cancelled and a 'send-error' is
@@ -294,6 +295,7 @@ def handler(self, connection, ws_path):
294295

295296
# Wait for the connection to be closed
296297
yield from close_future
298+
client.log.debug('WS connection closed')
297299

298300
# Remove protocol from server and stop
299301
self._server.unregister(self)
@@ -556,6 +558,7 @@ def initiator_receive_loop(self):
556558
'Dropping responder {}, reason: {}', responder, message.reason)
557559
responder.log.debug(
558560
'Dropping (requested by initiator), reason: {}', message.reason)
561+
# TODO: Mark responder as dropped and don't send relay messages
559562
coroutine = responder.close(code=message.reason.value)
560563
yield from responder.enqueue_task(coroutine)
561564
else:
@@ -725,16 +728,17 @@ def __init__(self):
725728
def get(self, initiator_key):
726729
if self.paths.get(initiator_key) is None:
727730
self.number += 1
728-
self.paths[initiator_key] = Path(initiator_key, self.number)
731+
self.paths[initiator_key] = Path(initiator_key, self.number, attached=True)
729732
self._log.debug('Created new path: {}', self.number)
730733
return self.paths[initiator_key]
731734

732735
def clean(self, path):
733-
if path.empty:
736+
if path.attached and path.empty:
737+
path.attached = False
734738
try:
735739
del self.paths[path.initiator_key]
736740
except KeyError:
737-
self._log.warning('Path {} has already been removed', path.number)
741+
self._log.error('Path {} has already been removed', path.number)
738742
else:
739743
self._log.debug('Removed empty path: {}', path.number)
740744

@@ -803,7 +807,6 @@ def register(self, protocol):
803807
def unregister(self, protocol):
804808
self.protocols.remove(protocol)
805809
self._log.debug('Protocol unregistered: {}', protocol)
806-
self.paths.clean(protocol.path)
807810

808811
def register_event_callback(self, event: Event, callback: Coroutine):
809812
"""

setup.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ def read(file):
2727
long_description = '\n\n'.join((read('README.rst'), read('CHANGELOG.rst')))
2828

2929
# Check python version
30-
py_version = sys.version_info[:2]
31-
if py_version < (3, 4):
32-
raise Exception("SaltyRTC requires Python >= 3.4")
30+
py_version = sys.version_info[:3]
31+
if py_version < (3, 4, 4):
32+
raise Exception("SaltyRTC requires Python >= 3.4.4")
3333

3434
# Logging requirements
3535
logging_require = [

0 commit comments

Comments
 (0)