diff options
author | Nathan Binkert <nate@binkert.org> | 2008-11-10 11:51:18 -0800 |
---|---|---|
committer | Nathan Binkert <nate@binkert.org> | 2008-11-10 11:51:18 -0800 |
commit | 4e02e7c217a1ee81dc16c378582697dd5a14de47 (patch) | |
tree | 6d39beaabb1df252632af16931827544aab44480 /src/python/swig/pyevent.cc | |
parent | 1adfe5c7f3368c4225ff685ddcd66b6280c7599f (diff) | |
download | gem5-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.cc | 23 |
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 |