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[] = {
PyDict_SetItemString(dict, "__builtin__", builtin);
PyDict_SetItemString(dict, "__builtins__", builtin);
+ PyEval_SaveThread();
return (jlong)modDef;
}
}
##VariableImpl( \
JNIEnv *env, jobject thisObj, jlong contextID, jstring variableName, \
jtype value) { \
- PyObject *module = getModule(contextID); \
+ PyObject *module; \
\
PyEval_RestoreThread(main_ts); \
+ module = getModule(contextID); \
setPythonVariable(module, getPythonString(env, variableName), \
j2py(env, value)); \
PyEval_SaveThread(); \
Java_org_simantics_pythonlink_PythonContext_setPythonNDArrayVariableImpl(
JNIEnv *env, jobject thisObj, jlong contextID, jstring variableName,
jobject value) {
- PyObject *module = getModule(contextID);
-
if (!hasNumpy) {
throwPythonException(env, "Importing numpy failed");
return;
PyEval_RestoreThread(main_ts);
{
+ PyObject *module = getModule(contextID);
PyObject *pythonName = getPythonString(env, variableName);
PyObject *val = getPythonNDArray(env, value);
Java_org_simantics_pythonlink_PythonContext_setPythonVariantVariableImpl(
JNIEnv *env, jobject thisObj, jlong contextID, jstring variableName,
jobject value, jobject binding) {
- PyObject *module = getModule(contextID);
+ PyObject *module;
PyEval_RestoreThread(main_ts);
+ module = getModule(contextID);
setPythonVariable(module, getPythonString(env, variableName),
getPythonObject(env, value, binding));
PyEval_SaveThread();
JNIEXPORT jint JNICALL
Java_org_simantics_pythonlink_PythonContext_executePythonStatementImpl(
JNIEnv *env, jobject thisObj, jlong contextID, jstring statement) {
- PyObject *module = getModule(contextID);
-
const char *utfchars = (*env)->GetStringUTFChars(env, statement, NULL);
PyEval_RestoreThread(main_ts);
PyErr_Clear();
{
+ PyObject *module = getModule(contextID);
+
jclass sclReportingWriterClass = (*env)->FindClass(env, SCL_REPORTING_WRITER_CLASS);
jmethodID constructor = (*env)->GetMethodID(env, sclReportingWriterClass, "<init>", "()V");
jmethodID flushMethod = (*env)->GetMethodID(env, sclReportingWriterClass, "flush", "()V");