Compare commits

...

3 Commits

Author SHA1 Message Date
Eliot Horowitz
ff8fd79bd4 jni lies - you do need to release things 2008-09-18 09:38:59 -04:00
Eliot Horowitz
84b5cd540a fixed inf. loop in jni error handler 2008-09-18 09:16:13 -04:00
Eliot Horowitz
2596ca0140 $where leak 2008-09-11 12:40:03 -04:00

View File

@@ -246,50 +246,78 @@ jboolean JavaJSImpl::scopeReset( jlong id ){
}
void JavaJSImpl::scopeFree( jlong id ){
_getEnv()->CallStaticVoidMethod( _dbhook , _scopeFree );
_getEnv()->CallStaticVoidMethod( _dbhook , _scopeFree , id );
}
// scope setters
int JavaJSImpl::scopeSetBoolean( jlong id , const char * field , jboolean val ) {
return _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetNumber , id , _getEnv()->NewStringUTF( field ) , val );
jstring fieldString = _getEnv()->NewStringUTF( field );
int res = _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetNumber , id , fieldString , val );
_getEnv()->DeleteLocalRef( fieldString );
return res;
}
int JavaJSImpl::scopeSetNumber( jlong id , const char * field , double val ){
return _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetNumber , id , _getEnv()->NewStringUTF( field ) , val );
jstring fieldString = _getEnv()->NewStringUTF( field );
int res = _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetNumber , id , fieldString , val );
_getEnv()->DeleteLocalRef( fieldString );
return res;
}
int JavaJSImpl::scopeSetString( jlong id , const char * field , const char * val ){
return _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetString , id , _getEnv()->NewStringUTF( field ) , _getEnv()->NewStringUTF( val ) );
jstring s1 = _getEnv()->NewStringUTF( field );
jstring s2 = _getEnv()->NewStringUTF( val );
int res = _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetString , id , s1 , s2 );
_getEnv()->DeleteLocalRef( s1 );
_getEnv()->DeleteLocalRef( s2 );
return res;
}
int JavaJSImpl::scopeSetObject( jlong id , const char * field , JSObj * obj ){
jobject bb = 0;
if ( obj ){
//cout << "from c : " << obj->toString() << endl;
bb = _getEnv()->NewDirectByteBuffer( (void*)(obj->objdata()) , (jlong)(obj->objsize()) );
jassert( bb );
}
jstring s1 = _getEnv()->NewStringUTF( field );
int res = _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetObject , id , s1 , bb );
_getEnv()->DeleteLocalRef( s1 );
if ( bb )
_getEnv()->DeleteLocalRef( bb );
return _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeSetObject , id , _getEnv()->NewStringUTF( field ) , bb );
return res;
}
// scope getters
char JavaJSImpl::scopeGetType( jlong id , const char * field ){
return _getEnv()->CallStaticByteMethod( _dbhook , _scopeGetType , id , _getEnv()->NewStringUTF( field ) );
jstring s1 = _getEnv()->NewStringUTF( field );
int res =_getEnv()->CallStaticByteMethod( _dbhook , _scopeGetType , id , s1 );
_getEnv()->DeleteLocalRef( s1 );
return res;
}
double JavaJSImpl::scopeGetNumber( jlong id , const char * field ){
return _getEnv()->CallStaticDoubleMethod( _dbhook , _scopeGetNumber , id , _getEnv()->NewStringUTF( field ) );
jstring s1 = _getEnv()->NewStringUTF( field );
double res = _getEnv()->CallStaticDoubleMethod( _dbhook , _scopeGetNumber , id , s1 );
_getEnv()->DeleteLocalRef( s1 );
return res;
}
jboolean JavaJSImpl::scopeGetBoolean( jlong id , const char * field ){
return _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeGetBoolean , id , _getEnv()->NewStringUTF( field ) );
jstring s1 = _getEnv()->NewStringUTF( field );
jboolean res = _getEnv()->CallStaticBooleanMethod( _dbhook , _scopeGetBoolean , id , s1 );
_getEnv()->DeleteLocalRef( s1 );
return res;
}
string JavaJSImpl::scopeGetString( jlong id , const char * field ) {
jstring s = (jstring)_getEnv()->CallStaticObjectMethod( _dbhook , _scopeGetString , id , _getEnv()->NewStringUTF( field ) );
jstring s1 = _getEnv()->NewStringUTF( field );
jstring s = (jstring)_getEnv()->CallStaticObjectMethod( _dbhook , _scopeGetString , id , s1 );
_getEnv()->DeleteLocalRef( s1 );
if ( ! s )
return "";
@@ -302,13 +330,16 @@ string JavaJSImpl::scopeGetString( jlong id , const char * field ) {
#ifdef J_USE_OBJ
JSObj JavaJSImpl::scopeGetObject( jlong id , const char * field )
{
jstring s1 = _getEnv()->NewStringUTF( field );
int guess = _getEnv()->CallStaticIntMethod( _dbhook , _scopeGuessObjectSize , id , _getEnv()->NewStringUTF( field ) );
_getEnv()->DeleteLocalRef( s1 );
char * buf = (char *) malloc(guess);
jobject bb = _getEnv()->NewDirectByteBuffer( (void*)buf , guess );
jassert( bb );
int len = _getEnv()->CallStaticIntMethod( _dbhook , _scopeGetObject , id , _getEnv()->NewStringUTF( field ) , bb );
_getEnv()->DeleteLocalRef( bb );
//cout << "len : " << len << endl;
jassert( len > 0 && len < guess );
@@ -324,6 +355,7 @@ jlong JavaJSImpl::functionCreate( const char * code ){
jstring s = _getEnv()->NewStringUTF( code );
jassert( s );
jlong id = _getEnv()->CallStaticLongMethod( _dbhook , _functionCreate , s );
_getEnv()->DeleteLocalRef( s );
return id;
}
@@ -342,6 +374,7 @@ void JavaJSImpl::run( const char * js ){
jstring s = _getEnv()->NewStringUTF( js );
log() << _getEnv()->CallStaticObjectMethod( c , m , s ) << endl;
_getEnv()->DeleteLocalRef( s );
}
void JavaJSImpl::printException(){
@@ -359,7 +392,11 @@ JNIEnv * JavaJSImpl::_getEnv(){
return env;
int res = _jvm->AttachCurrentThread( (void**)&env , (void*)&_vmArgs );
jassert( res == 0 );
if( res ) {
cout << "ERROR javajs attachcurrentthread fails res:" << res << '\n';
assert(false);
}
_envs->reset( env );
return env;
}