X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.pythonlink.win32.x86_64%2Fsrc%2Fsclpy.c;h=428a45a35667fe34fcf70b0f0baae0f465c53557;hb=1a64cbed776f5011b685b7d32bc4c217f1ae4264;hp=686221e2ac09da96874dc03c7c5abb857495b2e2;hpb=99a7e38e79e1f1bd4a01f37eaa9ea08ae7a9d433;p=simantics%2Fpython.git diff --git a/org.simantics.pythonlink.win32.x86_64/src/sclpy.c b/org.simantics.pythonlink.win32.x86_64/src/sclpy.c index 686221e..428a45a 100644 --- a/org.simantics.pythonlink.win32.x86_64/src/sclpy.c +++ b/org.simantics.pythonlink.win32.x86_64/src/sclpy.c @@ -53,19 +53,26 @@ writeToSCL(PyObject *self, PyObject *args) Py_UNICODE *what; Py_ssize_t length; if (!PyArg_ParseTuple(args, "u#", &what, &length)) - return Py_BuildValue(""); + Py_RETURN_NONE; { - jclass writerClass = (*env)->FindClass(env, WRITER_CLASS); - jmethodID writeMethod = (*env)->GetMethodID(env, writerClass, "write", "([CII)V"); - jcharArray chars = (*env)->NewCharArray(env, (jsize)length); - - (*env)->SetCharArrayRegion(env, chars, 0, length, what); - (*env)->CallVoidMethod(env, sclWriter, writeMethod, chars, 0, length); + PyThreadState *my_ts = PyThreadState_Get(); + if (my_ts == main_ts) { + jclass writerClass = (*env)->FindClass(env, WRITER_CLASS); + jmethodID writeMethod = (*env)->GetMethodID(env, writerClass, "write", "([CII)V"); + jcharArray chars = (*env)->NewCharArray(env, (jsize)length); + + (*env)->SetCharArrayRegion(env, chars, 0, length, what); + Py_BEGIN_ALLOW_THREADS + (*env)->CallVoidMethod(env, sclWriter, writeMethod, chars, 0, length); + Py_END_ALLOW_THREADS + } else { + //TODO + } } } - return Py_BuildValue(""); + Py_RETURN_NONE; } static PyMethodDef sclWriterMethods[] = {