From: Giampaolo RodolĂ  Date: Wed, 30 Jun 2010 17:38:28 +0000 (+0000) Subject: fix issue #6589: cleanup asyncore.socket_map if smtpd.SMTPServer constructor raises... X-Git-Tag: v2.7~31 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e00e2f008230c07e54c14f750c99fb755aa96dfc;p=python fix issue #6589: cleanup asyncore.socket_map if smtpd.SMTPServer constructor raises an exception --- diff --git a/Lib/smtpd.py b/Lib/smtpd.py index 3992d7bb4e..c3bd6a5add 100755 --- a/Lib/smtpd.py +++ b/Lib/smtpd.py @@ -274,15 +274,21 @@ class SMTPServer(asyncore.dispatcher): self._localaddr = localaddr self._remoteaddr = remoteaddr asyncore.dispatcher.__init__(self) - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - # try to re-use a server port if possible - self.set_reuse_addr() - self.bind(localaddr) - self.listen(5) - print >> DEBUGSTREAM, \ - '%s started at %s\n\tLocal addr: %s\n\tRemote addr:%s' % ( - self.__class__.__name__, time.ctime(time.time()), - localaddr, remoteaddr) + try: + self.create_socket(socket.AF_INET, socket.SOCK_STREAM) + # try to re-use a server port if possible + self.set_reuse_addr() + self.bind(localaddr) + self.listen(5) + except: + # cleanup asyncore.socket_map before raising + self.close() + raise + else: + print >> DEBUGSTREAM, \ + '%s started at %s\n\tLocal addr: %s\n\tRemote addr:%s' % ( + self.__class__.__name__, time.ctime(time.time()), + localaddr, remoteaddr) def handle_accept(self): conn, addr = self.accept() diff --git a/Misc/NEWS b/Misc/NEWS index f93f5a9e7c..1625c0cd20 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -51,6 +51,9 @@ Build Library ------- +- Issue #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor + raises an exception. + - Issue #8959: fix regression caused by using unmodified libffi library on Windows. ctypes does now again check the stack before and after calling foreign functions.