mturk 2005/06/09 03:24:53 Modified: jni/native/src ssl.c Log: Check for exceptions when allocating a new byte array. Also use critial methods instead array copying. On each call delete a local reference to the object so that GC clears that ASAP. Revision Changes Path 1.30 +18 -17 jakarta-tomcat-connectors/jni/native/src/ssl.c Index: ssl.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/ssl.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- ssl.c 9 Jun 2005 09:33:40 -0000 1.29 +++ ssl.c 9 Jun 2005 10:24:53 -0000 1.30 @@ -547,36 +547,37 @@ static int jbs_write(BIO *b, const char *in, int inl) { - int ret = 0; + jint ret = 0; if (b->init && in != NULL) { BIO_JAVA *j = (BIO_JAVA *)b->ptr; JNIEnv *e = j->cb.env; jbyteArray jb = (*e)->NewByteArray(e, inl); - (*e)->SetByteArrayRegion(e, jb, 0, inl, (jbyte *)in); - jint o = (*e)->CallIntMethod(e, j->cb.obj, - j->cb.mid[0], jb); - (*e)->ReleaseByteArrayElements(e, jb, (jbyte *)in, 0); - ret = o; + if (!(*e)->ExceptionOccurred(e)) { + (*e)->SetByteArrayRegion(e, jb, 0, inl, (jbyte *)in); + ret = (*e)->CallIntMethod(e, j->cb.obj, + j->cb.mid[0], jb); + (*e)->DeleteLocalRef(e, jb); + } } return ret; } static int jbs_read(BIO *b, char *out, int outl) { - int ret = 0; + jint ret = 0; if (b->init && out != NULL) { BIO_JAVA *j = (BIO_JAVA *)b->ptr; JNIEnv *e = j->cb.env; jbyteArray jb = (*e)->NewByteArray(e, outl); - - jint o = (*e)->CallObjectMethod(e, j->cb.obj, - j->cb.mid[1], jb); - if (o>=0) { - int i; - jbyte *jout = (*e)->GetByteArrayElements(e, jb, 0); - memcpy(out, jout, o); - (*e)->ReleaseByteArrayElements(e, jb, jout, 0); - ret = o; + if (!(*e)->ExceptionOccurred(e)) { + ret = (*e)->CallIntMethod(e, j->cb.obj, + j->cb.mid[1], jb); + if (ret > 0) { + jbyte *jout = (*e)->GetPrimitiveArrayCritical(e, jb, NULL); + memcpy(out, jout, ret); + (*e)->ReleasePrimitiveArrayCritical(e, jb, jout, 0); + } + (*e)->DeleteLocalRef(e, jb); } } return ret;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]