misc: close file descriptors in clean()
This commit is contained in:
parent
72c488b4c7
commit
58759b3e78
|
@ -103,16 +103,7 @@ olcAccess: {{0}}to *
|
|||
data_dirs = None
|
||||
db_index = 1
|
||||
tls = None
|
||||
|
||||
def create_process(self, args, pipe=True, out=None):
|
||||
if pipe:
|
||||
return subprocess.Popen(args, stdin=subprocess.PIPE, env=os.environ,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
else:
|
||||
DEVNULL = open(os.devnull, 'w')
|
||||
out = out or DEVNULL
|
||||
return subprocess.Popen(args, stdin=DEVNULL, env=os.environ, stdout=out,
|
||||
stderr=out)
|
||||
_close_fds = None
|
||||
|
||||
def __init__(self, ldap_url=None, config_context=None, tls=None):
|
||||
assert has_slapd()
|
||||
|
@ -192,6 +183,15 @@ olcAccess: {{0}}to * by * manage
|
|||
stdout, stderr = slapadd.communicate(input=bytearray(ldif, 'utf-8'))
|
||||
assert slapadd.returncode == 0, 'slapadd failed: %s' % stderr
|
||||
|
||||
def close_fds(self):
|
||||
for fd in self._close_fds or []:
|
||||
fd.close()
|
||||
|
||||
def set_close_fds(self, close_fds):
|
||||
self.close_fds()
|
||||
self._close_fds = close_fds
|
||||
|
||||
|
||||
def start(self):
|
||||
'''Launch slapd'''
|
||||
assert not self.process
|
||||
|
@ -201,7 +201,9 @@ olcAccess: {{0}}to * by * manage
|
|||
'-F' + self.config_dir,
|
||||
'-h', self.ldap_url]
|
||||
out_file = open(os.path.join(self.slapd_dir, 'stdout'), 'w')
|
||||
self.process = self.create_process(cmd, pipe=False, out=out_file)
|
||||
dev_null = open(os.devnull)
|
||||
self.process = subprocess.Popen(cmd, stdin=dev_null, env=os.environ, stdout=out_file, stderr=out_file)
|
||||
self.set_close_fds([out_file, dev_null])
|
||||
atexit.register(self.clean)
|
||||
|
||||
c = 0
|
||||
|
@ -263,6 +265,7 @@ olcAccess: {{0}}to * by * manage
|
|||
|
||||
def clean(self):
|
||||
'''Remove directory'''
|
||||
self.close_fds()
|
||||
try:
|
||||
if self.process:
|
||||
self.stop()
|
||||
|
|
Loading…
Reference in New Issue