Ignore:
Timestamp:
2012-03-21T20:05:50+13:00 (12 years ago)
Author:
ak19
Message:

GS3 tomcat server crashes because java crashes owing to some error in the JNI code. The error may be related to pointers having been stored as int rather than long, an issue that's become noticeable on 64 bit linux machines. Changes have been made in the JNI code where these pointers that are transferred between Java and C++ code are stored (GetIntField and SetIntField to GetLongField and SetLongField, as well as declaration of data_ptr as jlong not jint). Committing code first without debug statements so the commits can easily be done separately.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/common-src/indexers/mgpp/jni/MGPPSearchWrapperImpl.cpp

    r16583 r25244  
    163163
    164164  MGPPSearchData * data = new MGPPSearchData();
    165   j_env->SetIntField(j_obj, FID_mgpp_data, (long)data);
     165  j_env->SetLongField(j_obj, FID_mgpp_data, (long)data);
    166166
    167167  return true;
     
    178178Java_org_greenstone_mgpp_MGPPSearchWrapper_loadIndexData (JNIEnv *j_env, jobject j_obj,  jstring j_index_name) {
    179179
    180   jint data_ptr = j_env->GetIntField(j_obj, FID_mgpp_data);
     180  jlong data_ptr = j_env->GetLongField(j_obj, FID_mgpp_data);
    181181  MGPPSearchData * data = (MGPPSearchData *)data_ptr;
    182182
     
    210210Java_org_greenstone_mgpp_MGPPSearchWrapper_unloadIndexData (JNIEnv *j_env, jobject j_obj) {
    211211
    212   jint data_ptr = j_env->GetIntField(j_obj, FID_mgpp_data);
     212  jlong data_ptr = j_env->GetLongField(j_obj, FID_mgpp_data);
    213213  MGPPSearchData * data = (MGPPSearchData *)data_ptr;
    214214
     
    234234 
    235235  // the query data
    236   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     236  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    237237 
    238238  // the result to write to
     
    335335                          jobject j_obj,
    336336                          jboolean j_on) {
    337   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     337  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    338338  if (j_on) {
    339339    data->defaultStemMethod |= 2;
     
    348348                          jobject j_obj,
    349349                          jboolean j_on) {
    350   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     350  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    351351  if (j_on) {
    352352    data->defaultStemMethod |= 4;
     
    361361                          jobject j_obj,
    362362                          jboolean j_on) {
    363   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     363  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    364364
    365365  if (j_on) {
     
    374374                         jobject j_obj,
    375375                         jint j_max) {
    376   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     376  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    377377  data->queryInfo->maxDocs=j_max;
    378378}
     
    382382                         jobject j_obj,
    383383                         jint j_max) {
    384   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     384  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    385385  data->maxNumeric=j_max;
    386386}
     
    390390                            jobject j_obj,
    391391                            jboolean j_on) {
    392   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     392  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    393393 
    394394  data->queryInfo->sortByRank=j_on;
     
    399399                            jobject j_obj,
    400400                            jboolean j_on) {
    401   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     401  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    402402  data->queryInfo->needTermFreqs = j_on;
    403403 
     
    409409                           jstring j_level){
    410410 
    411   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     411  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    412412
    413413  const char * level = j_env->GetStringUTFChars(j_level, NULL);
     
    429429                            jstring j_level){
    430430
    431   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     431  jlong data_ptr = j_env->GetLongField(j_obj, FID_mgpp_data);
     432  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
     433
    432434
    433435  const char * level = j_env->GetStringUTFChars(j_level, NULL);
     
    441443  // release the java stuff
    442444  j_env->ReleaseStringUTFChars(j_level, level);
    443    
    444445
    445446}
     
    450451                           jint j_mode){
    451452
    452   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     453  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    453454  data->defaultBoolCombine=j_mode;
    454455
     
    459460                             jobject j_obj){
    460461
    461   MGPPSearchData * data = (MGPPSearchData *)j_env->GetIntField(j_obj, FID_mgpp_data);
     462  MGPPSearchData * data = (MGPPSearchData *)j_env->GetLongField(j_obj, FID_mgpp_data);
    462463 
    463464  // print the data to a stringstream, then convert to char*, then to
Note: See TracChangeset for help on using the changeset viewer.