瀏覽代碼

fixed bug with instance_times possibly growing unbounded

Simon Van Mierlo 6 年之前
父節點
當前提交
1060e49da1

+ 1 - 0
examples/bouncingballs/python/runner_performance_cpu_time.py

@@ -9,5 +9,6 @@ import sys
 from sccd.runtime.statecharts_core import Event
 
 if __name__ == '__main__':
+	# fields_to_create, balls_to_create
     controller = target.Controller(int(sys.argv[1]), int(sys.argv[2]))
     controller.start()

+ 1 - 0
examples/timer-threads/python/runner.py

@@ -16,6 +16,7 @@ if __name__ == '__main__':
     def outputter():
         while 1:
             event = output_listener.fetch(-1)
+            print event
             print "SIMTIME: %.2fs" % (event.getParameters()[0] / 1000.0)
             print "ACTTIME: %.2fs" % (event.getParameters()[1] / 1000.0)
     output_thread = threading.Thread(target=outputter)

+ 3 - 9
src/python_sccd/python_sccd_runtime/statecharts_core.py

@@ -150,13 +150,9 @@ class ObjectManagerBase(object):
         to_step = set()
         if len(self.instance_times) > (4 * len(self.instances)):
             new_instance_times = []
-            for it in self.instance_times:
-                if it[0] not in it[1].removed_timers:
-                    new_instance_times.append(it)
-                else:
-                    it[1].removed_timers.discard(it[0])
-            for i in self.instances:
-                i.removed_timers = set()
+            for it in self.instances:
+                if it.earliest_event_time != INFINITY:
+                    new_instance_times.append((it.earliest_event_time, it))
             self.instance_times = new_instance_times
             heapify(self.instance_times)
         while self.instance_times and self.instance_times[0][0] <= simulated_time:
@@ -990,7 +986,6 @@ class RuntimeClassBase(object):
         self.configuration_bitmap = 0
         self.transition_mem = {}
         self.config_mem = {}
-        self.removed_timers = set()
         
         self.narrow_cast_port = self.controller.addInputPort("<narrow_cast>", self)
 
@@ -1039,7 +1034,6 @@ class RuntimeClassBase(object):
         if index in self.timers_to_add:
             del self.timers_to_add[index]
         if index in self.timers:
-            self.removed_timers.add(self.timers[index])
             self.events.remove(self.timers[index])
             del self.timers[index]
         self.earliest_event_time = self.events.getEarliestTime()