diff --git a/pymusic/examples/eventlogger.py b/pymusic/examples/eventlogger.py index eba87165f1b9e8ffd27efa61b53bf4cae8732a50..5b9475fc5ba3a32b4a31c4ca54f6677a7dbbdd89 100755 --- a/pymusic/examples/eventlogger.py +++ b/pymusic/examples/eventlogger.py @@ -47,3 +47,5 @@ runtime = music.Runtime(setup, timestep) times = takewhile(lambda t: t <= stoptime, runtime) for time in times: pass + +runtime.finalize() diff --git a/pymusic/examples/eventsource.py b/pymusic/examples/eventsource.py index 6461bb899548978eafbde401870d0beef9168ec0..04a9442108d30e8a7d042434ef6695fcbc3638ea 100755 --- a/pymusic/examples/eventsource.py +++ b/pymusic/examples/eventsource.py @@ -47,3 +47,5 @@ for t in times: out.insertEvent(when, index, music.Index.GLOBAL) nextStep, nextEvents = step() + +runtime.finalize() diff --git a/pymusic/examples/messagelogger.py b/pymusic/examples/messagelogger.py index cea1146bb94c662bf37f3f55b1e1dca055316e79..1c973761889ee1dc207f6a8746f70c80493f5390 100755 --- a/pymusic/examples/messagelogger.py +++ b/pymusic/examples/messagelogger.py @@ -35,3 +35,5 @@ runtime = setup.runtime(timestep) times = takewhile(lambda t: t <= stoptime, runtime) for time in times: pass + +runtime.finalize() diff --git a/pymusic/examples/messagesource.py b/pymusic/examples/messagesource.py index 442e89f4413466cc82abe4474d67607e2fe71c00..86db1e76d968dd181377b42d0e31dbf292f09804 100755 --- a/pymusic/examples/messagesource.py +++ b/pymusic/examples/messagesource.py @@ -36,3 +36,5 @@ for t in times: out.insertMessage(when, msg) nextStep, nextEvents = step() + +runtime.finalize() diff --git a/pymusic/examples/receivers.py b/pymusic/examples/receivers.py index 2a796bdb6a6b12ad14269ba5204af247d5a67c36..a724a601dd19af5c4c7cb92433c5013491cd3d34 100755 --- a/pymusic/examples/receivers.py +++ b/pymusic/examples/receivers.py @@ -27,3 +27,5 @@ for time in times: sys.stdout.write( "t={}\treceiver {}: received Hello from sender {}\n". format(time, rank, srank)) + +runtime.finalize() diff --git a/pymusic/examples/senders.py b/pymusic/examples/senders.py index 2ea85ea8175b966f03abe93ba41808da10167806..8efb20653d22b0c551253347bc1e1075f8e3a49a 100755 --- a/pymusic/examples/senders.py +++ b/pymusic/examples/senders.py @@ -22,3 +22,5 @@ times = takewhile(lambda t: t < stoptime, runtime) for time in times: data[0] = rank sys.stdout.write("t={}\tsender {}: Hello!\n".format(time, rank)) + +runtime.finalize() diff --git a/pymusic/examples/testsink.py b/pymusic/examples/testsink.py index bc9f4e1b3dc4476ad4d7634bb9f848946d74f701..0fd312a912cb0b513dd1a6a3c22e543d71820929 100755 --- a/pymusic/examples/testsink.py +++ b/pymusic/examples/testsink.py @@ -44,3 +44,5 @@ runtime = music.Runtime(setup, timestep) times = takewhile(lambda t: t <= stoptime, runtime) for time in times: pass + +runtime.finalize() diff --git a/pymusic/examples/testsource.py b/pymusic/examples/testsource.py index fc8024892d6c7232e9f62d56b304892c9608b72e..d8daf36c51ab10e40e5a2f60572dd2029a655851 100755 --- a/pymusic/examples/testsource.py +++ b/pymusic/examples/testsource.py @@ -54,3 +54,5 @@ for t in times: out.insertEvent(when, i, index) nextStep, nextEvents = step() + +runtime.finalize() diff --git a/pymusic/pymusic.pxd b/pymusic/pymusic.pxd index 92aa5c646ac0bf5fcb42af8e1937271f823e03f8..d1d7d68781f760b0e1abe8db987be69237344d20 100644 --- a/pymusic/pymusic.pxd +++ b/pymusic/pymusic.pxd @@ -186,6 +186,7 @@ cdef class Runtime(object): cdef CRuntime* ptr cdef readonly MPI.Intracomm comm cdef set ports + cdef int isFinalized ########################################################### diff --git a/pymusic/pymusic.pyx b/pymusic/pymusic.pyx index 63accac81a952b723f03aed7bb07faaa28d58070..ac8a98bcad518ef8c6f8487279da413a6e13c41a 100644 --- a/pymusic/pymusic.pyx +++ b/pymusic/pymusic.pyx @@ -518,6 +518,7 @@ cdef class Runtime(object): def __cinit__(self, Setup setup, double h): self.ptr = new CRuntime(setup.ptr, h) self.ports = setup.ports + self.isFinalized = 0 setup.null() cdef MPI.Intracomm comm = MPI.Intracomm() @@ -525,7 +526,8 @@ cdef class Runtime(object): self.comm = comm def __dealloc__(self): - self.ptr.finalize() + if not self.isFinalized: + self.ptr.finalize() for p in self.ports: p.null() @@ -533,8 +535,13 @@ cdef class Runtime(object): del self.ptr def time(self): return self.ptr.time() + def tick(self): tick(self.ptr) + def finalize(self): + self.isFinalized = 1 + self.ptr.finalize() + def __iter__(self): cdef CRuntime* ptr = self.ptr while True: