Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ACS
Public
Power System Simulation and Optimization
DPsim
DPsim
Commits
b41b1448
Commit
b41b1448
authored
Oct 01, 2018
by
Steffen Vogel
🎅🏼
Browse files
python: add proper reference counting for logged Components/Nodes
Former-commit-id:
94d532fd
parent
9c7076af
Changes
2
Show whitespace changes
Inline
Side-by-side
Include/dpsim/Python/Logger.h
View file @
b41b1448
...
...
@@ -41,6 +41,8 @@ namespace Python {
struct
Logger
{
PyObject_HEAD
std
::
vector
<
PyObject
*>
refs
;
DPsim
::
DataLogger
::
Ptr
logger
;
const
char
*
filename
;
...
...
Source/Python/Logger.cpp
View file @
b41b1448
...
...
@@ -36,8 +36,10 @@ PyObject* Python::Logger::newfunc(PyTypeObject *type, PyObject *args, PyObject *
self
=
(
Python
::
Logger
*
)
type
->
tp_alloc
(
type
,
0
);
if
(
self
)
{
using
PyObjectVector
=
std
::
vector
<
PyObject
*>
;
using
SharedLoggerPtr
=
std
::
shared_ptr
<
DPsim
::
DataLogger
>
;
new
(
&
self
->
refs
)
PyObjectVector
();
new
(
&
self
->
logger
)
SharedLoggerPtr
();
}
...
...
@@ -46,9 +48,14 @@ PyObject* Python::Logger::newfunc(PyTypeObject *type, PyObject *args, PyObject *
void
Python
::
Logger
::
dealloc
(
Python
::
Logger
*
self
)
{
using
PyObjectVector
=
std
::
vector
<
PyObject
*>
;
using
SharedLoggerPtr
=
std
::
shared_ptr
<
DPsim
::
DataLogger
>
;
for
(
PyObject
*
pyRef
:
self
->
refs
)
Py_DECREF
(
pyRef
);
self
->
logger
.
~
SharedLoggerPtr
();
self
->
refs
.
~
PyObjectVector
();
Py_TYPE
(
self
)
->
tp_free
((
PyObject
*
)
self
);
}
...
...
@@ -103,6 +110,9 @@ PyObject* Python::Logger::logAttribute(Logger* self, PyObject* args, PyObject *k
return
nullptr
;
}
self
->
refs
.
push_back
(
pyObj
);
Py_INCREF
(
pyObj
);
Py_RETURN_NONE
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment