summaryrefslogtreecommitdiff
path: root/src/python/swig/pyevent.cc
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2008-11-10 11:51:18 -0800
committerNathan Binkert <nate@binkert.org>2008-11-10 11:51:18 -0800
commit4e02e7c217a1ee81dc16c378582697dd5a14de47 (patch)
tree6d39beaabb1df252632af16931827544aab44480 /src/python/swig/pyevent.cc
parent1adfe5c7f3368c4225ff685ddcd66b6280c7599f (diff)
downloadgem5-4e02e7c217a1ee81dc16c378582697dd5a14de47.tar.xz
python: Fix the reference counting for python events placed on the eventq.
We need to add a reference when an object is put on the C++ queue, and remove a reference when the object is removed from the queue. This was not happening before and caused a memory problem.
Diffstat (limited to 'src/python/swig/pyevent.cc')
-rw-r--r--src/python/swig/pyevent.cc23
1 files changed, 4 insertions, 19 deletions
diff --git a/src/python/swig/pyevent.cc b/src/python/swig/pyevent.cc
index a201e0185..0695ed2d3 100644
--- a/src/python/swig/pyevent.cc
+++ b/src/python/swig/pyevent.cc
@@ -38,15 +38,10 @@ PythonEvent::PythonEvent(PyObject *obj, Priority priority)
{
if (object == NULL)
panic("Passed in invalid object");
-
- Py_INCREF(object);
-
- setFlags(AutoDelete);
}
PythonEvent::~PythonEvent()
{
- Py_DECREF(object);
}
void
@@ -65,6 +60,10 @@ PythonEvent::process()
async_event = true;
async_exception = true;
}
+
+ // Since the object has been removed from the event queue, its
+ // reference count must be decremented.
+ Py_DECREF(object);
}
CountedDrainEvent *
@@ -85,17 +84,3 @@ cleanupCountedDrain(Event *counted_drain)
assert(event->getCount() == 0);
delete event;
}
-
-#if 0
-Event *
-create(PyObject *object, Event::Priority priority)
-{
- return new PythonEvent(object, priority);
-}
-
-void
-destroy(Event *event)
-{
- delete event;
-}
-#endif