diff options
author | Mark Spruiell <mes@zeroc.com> | 2017-03-08 16:00:41 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2017-03-08 16:00:41 -0800 |
commit | 9910a2a5594932daebbc69374878e701236742ef (patch) | |
tree | ce461e3c5f3582b9547ccd130b019417a2c6904d /python/modules/IcePy/Thread.cpp | |
parent | - ICE-6845 - More dispatcher fixes for Python (diff) | |
download | ice-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.cpp | 27 |
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 |