You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by va...@apache.org on 2009/03/23 20:05:29 UTC
svn commit: r757503 - in /lucene/pylucene/trunk: ./ Makefile jcc/CHANGES
jcc/jcc/sources/JCCEnv.cpp jcc/jcc/sources/functions.cpp
Author: vajda
Date: Mon Mar 23 19:05:29 2009
New Revision: 757503
URL: http://svn.apache.org/viewvc?rev=757503&view=rev
Log:
- fixed bug with failing to detect missing initVM() call
- failure to call attachCurrentThread() now reported with error, not crash
Modified:
lucene/pylucene/trunk/ (props changed)
lucene/pylucene/trunk/Makefile
lucene/pylucene/trunk/jcc/CHANGES
lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
Propchange: lucene/pylucene/trunk/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Mar 23 19:05:29 2009
@@ -1,4 +1,5 @@
lucene-java-*
+distrib
build
dist
t
Modified: lucene/pylucene/trunk/Makefile
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/Makefile?rev=757503&r1=757502&r2=757503&view=diff
==============================================================================
--- lucene/pylucene/trunk/Makefile (original)
+++ lucene/pylucene/trunk/Makefile Mon Mar 23 19:05:29 2009
@@ -14,7 +14,7 @@
# site-packages directory.
#
-VERSION=2.4.1-rc5
+VERSION=2.4.1-rc6
LUCENE_SVN_VER=HEAD
LUCENE_VER=2.4.1
LUCENE_SVN=http://svn.apache.org/repos/asf/lucene/java/tags/lucene_2_4_1
@@ -57,14 +57,14 @@
#PREFIX_PYTHON=/usr
#ANT=ant
#PYTHON=$(PREFIX_PYTHON)/bin/python
-#JCC=$(PYTHON) /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/JCC-2.1-py2.3-macosx-10.4-i386.egg/jcc/__init__.py
+#JCC=$(PYTHON) /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/JCC-2.2-py2.3-macosx-10.4-i386.egg/jcc/__init__.py
#NUM_FILES=2
# Mac OS X (Python 2.3.5, Java 1.5, setuptools 0.6c7, PPC Mac OS X 10.4)
#PREFIX_PYTHON=/usr
#ANT=ant
#PYTHON=$(PREFIX_PYTHON)/bin/python
-#JCC=$(PYTHON) /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/JCC-2.1-py2.3-macosx-10.4-ppc.egg/jcc/__init__.py
+#JCC=$(PYTHON) /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/JCC-2.2-py2.3-macosx-10.4-ppc.egg/jcc/__init__.py
#NUM_FILES=2
# Linux (Ubuntu 6.06, Python 2.4, Java 1.5, no setuptools)
Modified: lucene/pylucene/trunk/jcc/CHANGES
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/CHANGES?rev=757503&r1=757502&r2=757503&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/CHANGES (original)
+++ lucene/pylucene/trunk/jcc/CHANGES Mon Mar 23 19:05:29 2009
@@ -18,6 +18,7 @@
- passing strings for byte[] or char[] is no longer supported, use JArray
- failure to call initVM() now reported with error instead of crash
- failure to find class now reported with error instead of crash
+ - failure to call attachCurrentThread() now reported with error, not crash
Version 2.0 -> 2.1
------------------
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp?rev=757503&r1=757502&r2=757503&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp Mon Mar 23 19:05:29 2009
@@ -71,7 +71,7 @@
}
#endif
- if (vm != NULL)
+ if (vm)
set_vm(vm, vm_env);
else
this->vm = NULL;
@@ -132,8 +132,25 @@
{
jclass cls = NULL;
- if (env->vm)
- cls = get_vm_env()->FindClass(className);
+ if (vm)
+ {
+ JNIEnv *vm_env = get_vm_env();
+
+ if (vm_env)
+ cls = vm_env->FindClass(className);
+#ifdef PYTHON
+ else
+ {
+ PythonGIL gil;
+
+ PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
+ throw pythonError(NULL);
+ }
+#else
+ else
+ throw exception(NULL);
+#endif
+ }
#ifdef PYTHON
else
{
@@ -239,14 +256,30 @@
jobject JCCEnv::newObject(jclass (*initializeClass)(), jmethodID **mids,
int m, ...)
{
- jclass cls;
+ jclass cls = (*initializeClass)();
+ JNIEnv *vm_env = get_vm_env();
jobject obj;
- va_list ap;
- va_start(ap, m);
- cls = (*initializeClass)();
- obj = get_vm_env()->NewObjectV(cls, (*mids)[m], ap);
- va_end(ap);
+ if (vm_env)
+ {
+ va_list ap;
+
+ va_start(ap, m);
+ obj = vm_env->NewObjectV(cls, (*mids)[m], ap);
+ va_end(ap);
+ }
+#ifdef PYTHON
+ else
+ {
+ PythonGIL gil;
+
+ PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
+ throw pythonError(NULL);
+ }
+#else
+ else
+ throw exception(NULL);
+#endif
reportException();
@@ -611,7 +644,8 @@
{
if (object == Py_None)
return NULL;
- else if (PyUnicode_Check(object))
+
+ if (PyUnicode_Check(object))
{
if (sizeof(Py_UNICODE) == sizeof(jchar))
{
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp?rev=757503&r1=757502&r2=757503&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp Mon Mar 23 19:05:29 2009
@@ -110,6 +110,20 @@
va_start(check, types);
#endif
+ if (!env->vm)
+ {
+ PyErr_SetString(PyExc_RuntimeError, "initVM() must be called first");
+ return -1;
+ }
+
+ JNIEnv *vm_env = env->get_vm_env();
+
+ if (!vm_env)
+ {
+ PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
+ return -1;
+ }
+
unsigned int pos = 0;
int array = 0;
@@ -171,7 +185,7 @@
int ok =
(obj == Py_None ||
(PyObject_TypeCheck(obj, &Object$$Type) &&
- env->get_vm_env()->IsInstanceOf(((t_Object *) obj)->object.this$, cls)));
+ vm_env->IsInstanceOf(((t_Object *) obj)->object.this$, cls)));
Py_DECREF(obj);
if (ok)
@@ -182,13 +196,13 @@
}
}
else if (PyObject_TypeCheck(arg, &Object$$Type) &&
- env->get_vm_env()->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
+ vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
break;
else if (PyObject_TypeCheck(arg, &FinalizerProxy$$Type))
{
arg = ((t_fp *) arg)->object;
if (PyObject_TypeCheck(arg, &Object$$Type) &&
- env->get_vm_env()->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
+ vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
break;
}