From: Sarah Hoffmann Date: Sat, 27 Feb 2021 09:24:40 +0000 (+0100) Subject: make sure psql always finishes X-Git-Tag: v3.7.0~29^2 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/b46adbad224eabd915fa5363b719afd0c8571476?hp=--cc make sure psql always finishes If an execption is raised by other means, we still have to close the stdin pipe to psql to make sure that it exits and releases its connection to the database. --- b46adbad224eabd915fa5363b719afd0c8571476 diff --git a/nominatim/db/utils.py b/nominatim/db/utils.py index 6d2eb297..0a2e2c06 100644 --- a/nominatim/db/utils.py +++ b/nominatim/db/utils.py @@ -35,24 +35,25 @@ def execute_file(dsn, fname, ignore_errors=False, pre_code=None, post_code=None) cmd.append('--quiet') proc = subprocess.Popen(cmd, env=get_pg_env(dsn), stdin=subprocess.PIPE) - if not LOG.isEnabledFor(logging.INFO): - proc.stdin.write('set client_min_messages to WARNING;'.encode('utf-8')) - - if pre_code: - proc.stdin.write((pre_code + ';').encode('utf-8')) - - if fname.suffix == '.gz': - with gzip.open(str(fname), 'rb') as fdesc: - remain = _pipe_to_proc(proc, fdesc) - else: - with fname.open('rb') as fdesc: - remain = _pipe_to_proc(proc, fdesc) - - if remain == 0 and post_code: - proc.stdin.write((';' + post_code).encode('utf-8')) - - proc.stdin.close() + try: + if not LOG.isEnabledFor(logging.INFO): + proc.stdin.write('set client_min_messages to WARNING;'.encode('utf-8')) + + if pre_code: + proc.stdin.write((pre_code + ';').encode('utf-8')) + + if fname.suffix == '.gz': + with gzip.open(str(fname), 'rb') as fdesc: + remain = _pipe_to_proc(proc, fdesc) + else: + with fname.open('rb') as fdesc: + remain = _pipe_to_proc(proc, fdesc) + + if remain == 0 and post_code: + proc.stdin.write((';' + post_code).encode('utf-8')) + finally: + proc.stdin.close() + ret = proc.wait() - ret = proc.wait() if ret != 0 or remain > 0: raise UsageError("Failed to execute SQL file.")