aboutsummaryrefslogtreecommitdiff
path: root/lib/python
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2008-10-29 19:46:57 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2008-10-29 19:46:57 +0000
commit10e7e45ae92d4fe06f70126ed256b87896dbc432 (patch)
treef4b03eb252e5517ccb67be3cd8463c10e14e147c /lib/python
parent6bb94cd5b0d8fd3608afe84e8d76aef554a4b401 (diff)
downloadenigma2-10e7e45ae92d4fe06f70126ed256b87896dbc432.tar.gz
enigma2-10e7e45ae92d4fe06f70126ed256b87896dbc432.zip
better solution to add possibility to delete eSocketNotifiers,
eConsoleAppContainers in callback funktions without crash
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp4
-rw-r--r--lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h2
-rw-r--r--lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.cpp13
-rw-r--r--lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.h2
-rw-r--r--lib/python/connections.cpp22
-rw-r--r--lib/python/connections.h27
6 files changed, 29 insertions, 41 deletions
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
index da7bc5f2..1add04ab 100644
--- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
+++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
@@ -91,9 +91,9 @@ eServiceDVD::eServiceDVD(const char *filename):
m_subtitle_widget(0),
m_state(stIdle),
m_current_trick(0),
- m_sn(eApp, ddvd_get_messagepipe_fd(m_ddvdconfig), eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Error|eSocketNotifier::Hungup),
m_pump(eApp, 1)
{
+ m_sn = eSocketNotifier::create(eApp, ddvd_get_messagepipe_fd(m_ddvdconfig), eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Error|eSocketNotifier::Hungup);
std::string aspect;
eDebug("SERVICEDVD construct!");
// create handle
@@ -111,7 +111,7 @@ eServiceDVD::eServiceDVD(const char *filename):
ddvd_set_video(m_ddvdconfig, DDVD_16_9, DDVD_PAL);
ddvd_set_lfb(m_ddvdconfig, (unsigned char *)m_pixmap->surface->data, 720, 576, 4, 720*4);
- CONNECT(m_sn.activated, eServiceDVD::gotMessage);
+ CONNECT(m_sn->activated, eServiceDVD::gotMessage);
CONNECT(m_pump.recv_msg, eServiceDVD::gotThreadMessage);
strcpy(m_ddvd_titlestring,"");
m_cue_pts = 0;
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
index bdec4836..12e21d2f 100644
--- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
+++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
@@ -118,7 +118,7 @@ private:
char m_ddvd_titlestring[96];
- eSocketNotifier m_sn;
+ ePtr<eSocketNotifier> m_sn;
eFixedMessagePump<int> m_pump;
pts_t m_cue_pts;
diff --git a/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.cpp b/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.cpp
index 36ce9f40..673b525c 100644
--- a/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.cpp
+++ b/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.cpp
@@ -129,7 +129,7 @@ int eSocketMMIHandler::send_to_mmisock( void* buf, size_t len)
}
eSocketMMIHandler::eSocketMMIHandler()
- :buffer(512), connfd(-1), connsn(0), sockname("/tmp/mmi.socket"), name(0)
+ :buffer(512), connfd(-1), sockname("/tmp/mmi.socket"), name(0)
{
memset(&servaddr, 0, sizeof(struct sockaddr_un));
servaddr.sun_family = AF_UNIX;
@@ -154,7 +154,7 @@ eSocketMMIHandler::eSocketMMIHandler()
else if (listen(listenfd, 0) == -1)
eDebug("[eSocketMMIHandler] listen (%m)");
else {
- listensn = new eSocketNotifier( eApp, listenfd, POLLIN );
+ listensn = eSocketNotifier::create( eApp, listenfd, POLLIN );
listensn->start();
CONNECT( listensn->activated, eSocketMMIHandler::listenDataAvail );
eDebug("[eSocketMMIHandler] created successfully");
@@ -186,7 +186,7 @@ void eSocketMMIHandler::listenDataAvail(int what)
else if (fcntl(connfd, F_SETFL, val | O_NONBLOCK) == -1)
eDebug("[eSocketMMIHandler] F_SETFL (%m)");
else {
- connsn = new eSocketNotifier( eApp, connfd, POLLIN|POLLHUP|POLLERR );
+ connsn = eSocketNotifier::create( eApp, connfd, POLLIN|POLLHUP|POLLERR );
CONNECT( connsn->activated, eSocketMMIHandler::connDataAvail );
return;
}
@@ -294,11 +294,7 @@ void eSocketMMIHandler::closeConn()
close(connfd);
connfd=-1;
}
- if ( connsn )
- {
- delete connsn;
- connsn=0;
- }
+ connsn=0;
if ( name )
{
delete [] name;
@@ -309,7 +305,6 @@ void eSocketMMIHandler::closeConn()
eSocketMMIHandler::~eSocketMMIHandler()
{
closeConn();
- delete listensn;
unlink(sockname);
}
diff --git a/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.h b/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.h
index ebba9a62..063e1d54 100644
--- a/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.h
+++ b/lib/python/Plugins/Extensions/SocketMMI/src/socket_mmi.h
@@ -16,7 +16,7 @@ class eSocketMMIHandler: public Object
eIOBuffer buffer;
int listenfd, connfd, clilen;
struct sockaddr_un servaddr;
- eSocketNotifier *listensn, *connsn;
+ ePtr<eSocketNotifier> listensn, connsn;
void listenDataAvail(int what);
void connDataAvail(int what);
void closeConn();
diff --git a/lib/python/connections.cpp b/lib/python/connections.cpp
index b54c07b1..c0d38f89 100644
--- a/lib/python/connections.cpp
+++ b/lib/python/connections.cpp
@@ -1,14 +1,11 @@
#include <lib/python/connections.h>
PSignal::PSignal()
- :m_destroyed(0)
{
}
PSignal::~PSignal()
{
- if (m_destroyed)
- *m_destroyed = true;
Py_XDECREF(m_list);
}
@@ -23,12 +20,21 @@ void PSignal::callPython(ePyObject tuple)
}
}
-PyObject *PSignal::get(bool steal)
+PyObject *PSignal::get()
{
- if (!steal) {
- if (!m_list)
- m_list = PyList_New(0);
- Py_INCREF(m_list);
+ if (!m_list)
+ m_list = PyList_New(0);
+ Py_INCREF(m_list);
+ return m_list;
+}
+
+PyObject *PSignal::getSteal(bool clear)
+{
+ if (clear)
+ {
+ ePyObject ret = m_list;
+ m_list = (PyObject*)0;
+ return ret;
}
return m_list;
}
diff --git a/lib/python/connections.h b/lib/python/connections.h
index ab123137..ad76198a 100644
--- a/lib/python/connections.h
+++ b/lib/python/connections.h
@@ -14,12 +14,14 @@ class PSignal
{
protected:
ePyObject m_list;
- bool *m_destroyed;
public:
PSignal();
~PSignal();
void callPython(SWIG_PYOBJECT(ePyObject) tuple);
- PyObject *get(bool steal=false);
+#ifndef SWIG
+ PyObject *getSteal(bool clear=false);
+#endif
+ PyObject *get();
};
inline PyObject *PyFrom(int v)
@@ -38,18 +40,13 @@ class PSignal0: public PSignal, public Signal0<R>
public:
R operator()()
{
- bool destroyed=false;
- m_destroyed = &destroyed;
if (m_list)
{
PyObject *pArgs = PyTuple_New(0);
callPython(pArgs);
Org_Py_DECREF(pArgs);
}
- if (!destroyed) {
- m_destroyed = 0;
- return Signal0<R>::operator()();
- }
+ return Signal0<R>::operator()();
}
};
@@ -59,8 +56,6 @@ class PSignal1: public PSignal, public Signal1<R,V0>
public:
R operator()(V0 a0)
{
- bool destroyed=false;
- m_destroyed = &destroyed;
if (m_list)
{
PyObject *pArgs = PyTuple_New(1);
@@ -68,10 +63,7 @@ public:
callPython(pArgs);
Org_Py_DECREF(pArgs);
}
- if (!destroyed) {
- m_destroyed = 0;
- return Signal1<R,V0>::operator()(a0);
- }
+ return Signal1<R,V0>::operator()(a0);
}
};
@@ -81,8 +73,6 @@ class PSignal2: public PSignal, public Signal2<R,V0,V1>
public:
R operator()(V0 a0, V1 a1)
{
- bool destroyed=false;
- m_destroyed = &destroyed;
if (m_list)
{
PyObject *pArgs = PyTuple_New(2);
@@ -91,10 +81,7 @@ public:
callPython(pArgs);
Org_Py_DECREF(pArgs);
}
- if (!destroyed) {
- m_destroyed = 0;
- return Signal2<R,V0,V1>::operator()(a0, a1);
- }
+ return Signal2<R,V0,V1>::operator()(a0, a1);
}
};