Commit e00e2f00 authored by Giampaolo Rodolà's avatar Giampaolo Rodolà

fix issue #6589: cleanup asyncore.socket_map if smtpd.SMTPServer constructor raises an exception

parent 10947a64
...@@ -274,15 +274,21 @@ class SMTPServer(asyncore.dispatcher): ...@@ -274,15 +274,21 @@ class SMTPServer(asyncore.dispatcher):
self._localaddr = localaddr self._localaddr = localaddr
self._remoteaddr = remoteaddr self._remoteaddr = remoteaddr
asyncore.dispatcher.__init__(self) asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM) try:
# try to re-use a server port if possible self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr() # try to re-use a server port if possible
self.bind(localaddr) self.set_reuse_addr()
self.listen(5) self.bind(localaddr)
print >> DEBUGSTREAM, \ self.listen(5)
'%s started at %s\n\tLocal addr: %s\n\tRemote addr:%s' % ( except:
self.__class__.__name__, time.ctime(time.time()), # cleanup asyncore.socket_map before raising
localaddr, remoteaddr) 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): def handle_accept(self):
conn, addr = self.accept() conn, addr = self.accept()
......
...@@ -51,6 +51,9 @@ Build ...@@ -51,6 +51,9 @@ Build
Library Library
------- -------
- Issue #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor
raises an exception.
- Issue #8959: fix regression caused by using unmodified libffi - Issue #8959: fix regression caused by using unmodified libffi
library on Windows. ctypes does now again check the stack before library on Windows. ctypes does now again check the stack before
and after calling foreign functions. and after calling foreign functions.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment