From 08f458772fd8aefc8bac34fa231f6391c9b27e3c Mon Sep 17 00:00:00 2001 From: Kipp Cannon <kipp.cannon@ligo.org> Date: Thu, 7 Nov 2013 00:45:04 -0500 Subject: [PATCH] lloidparts: use locks as context managers --- gstlal-inspiral/python/lloidparts.py | 48 +++++++++++++--------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/gstlal-inspiral/python/lloidparts.py b/gstlal-inspiral/python/lloidparts.py index e2075af856..1e6d8dd836 100644 --- a/gstlal-inspiral/python/lloidparts.py +++ b/gstlal-inspiral/python/lloidparts.py @@ -194,31 +194,29 @@ class Handler(simplehandler.Handler): return False def flush_segments_to_disk(self, timestamp): - self.lock.acquire() - try: - # close out existing segments - for name, elem in [(name, self.pipeline.get_by_name(name)) for name in self.gates]: - if name in self.current_segment_start: - # By construction these gates should be - # in the on state. We fake a state - # transition to off in order to flush - # the segments - self.gatehandler(elem, timestamp, "off") - # But we have to remember to put it back - self.gatehandler(elem, timestamp, "on") - xmldoc = self.gen_segments_doc() - # FIXME Can't use extent_all() since one list might be empty. - ext = self.segments.union(self.segments.keys()).extent() - fname = "%s-%s_SEGMENTS-%d-%d.xml.gz" % ("".join(sorted(self.dataclass.instruments)), self.tag, int(ext[0]), int(abs(ext))) - utils.write_filename(xmldoc, fname, gz = fname.endswith('.gz'), verbose = self.verbose) - - # Reset the segment lists - for name in self.segments: - self.segments[name] = segments.segmentlist([]) - except ValueError: - print >>sys.stderr, "Warning: couldn't build segment list on checkpoint, probably there aren't any segments" - finally: - self.lock.release() + with self.lock: + try: + # close out existing segments + for name, elem in [(name, self.pipeline.get_by_name(name)) for name in self.gates]: + if name in self.current_segment_start: + # By construction these gates should be + # in the on state. We fake a state + # transition to off in order to flush + # the segments + self.gatehandler(elem, timestamp, "off") + # But we have to remember to put it back + self.gatehandler(elem, timestamp, "on") + xmldoc = self.gen_segments_doc() + # FIXME Can't use extent_all() since one list might be empty. + ext = self.segments.union(self.segments.keys()).extent() + fname = "%s-%s_SEGMENTS-%d-%d.xml.gz" % ("".join(sorted(self.dataclass.instruments)), self.tag, int(ext[0]), int(abs(ext))) + utils.write_filename(xmldoc, fname, gz = fname.endswith('.gz'), verbose = self.verbose) + + # Reset the segment lists + for name in self.segments: + self.segments[name] = segments.segmentlist([]) + except ValueError: + print >>sys.stderr, "Warning: couldn't build segment list on checkpoint, probably there aren't any segments" def gatehandler(self, elem, timestamp, segment_type): timestamp = LIGOTimeGPS(0, timestamp) # timestamp is in nanoseconds -- GitLab