summaryrefslogtreecommitdiff
path: root/python/modules/IcePy/Thread.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2017-03-08 16:00:41 -0800
committerMark Spruiell <mes@zeroc.com>2017-03-08 16:00:41 -0800
commit9910a2a5594932daebbc69374878e701236742ef (patch)
treece461e3c5f3582b9547ccd130b019417a2c6904d /python/modules/IcePy/Thread.cpp
parent- ICE-6845 - More dispatcher fixes for Python (diff)
downloadice-9910a2a5594932daebbc69374878e701236742ef.tar.bz2
ice-9910a2a5594932daebbc69374878e701236742ef.tar.xz
ice-9910a2a5594932daebbc69374878e701236742ef.zip
Python thread hook fixes
Diffstat (limited to 'python/modules/IcePy/Thread.cpp')
-rw-r--r--python/modules/IcePy/Thread.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/python/modules/IcePy/Thread.cpp b/python/modules/IcePy/Thread.cpp
index 06f100200a3..4be4a97702d 100644
--- a/python/modules/IcePy/Thread.cpp
+++ b/python/modules/IcePy/Thread.cpp
@@ -38,9 +38,30 @@ IcePy::AdoptThread::~AdoptThread()
IcePy::ThreadHook::ThreadHook(PyObject* threadNotification, PyObject* threadStart, PyObject* threadStop) :
_threadNotification(threadNotification), _threadStart(threadStart), _threadStop(threadStop)
{
- Py_INCREF(threadNotification);
- Py_INCREF(threadStart);
- Py_INCREF(threadStop);
+ if(threadNotification)
+ {
+ if(!PyObject_HasAttrString(threadNotification, STRCAST("start")) ||
+ !PyObject_HasAttrString(threadNotification, STRCAST("stop")))
+ {
+ throw Ice::InitializationException(__FILE__, __LINE__,
+ "threadNotification object must have 'start' and 'stop' methods");
+ }
+
+ }
+
+ if(threadStart && !PyCallable_Check(threadStart))
+ {
+ throw Ice::InitializationException(__FILE__, __LINE__, "threadStart must be a callable");
+ }
+
+ if(threadStop && !PyCallable_Check(threadStop))
+ {
+ throw Ice::InitializationException(__FILE__, __LINE__, "threadStop must be a callable");
+ }
+
+ Py_XINCREF(threadNotification);
+ Py_XINCREF(threadStart);
+ Py_XINCREF(threadStop);
}
void