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/mg/jni/MGWrapperImpl.c

    r25147 r25244  
    168168
    169169  /* Save the object on the Java side */
    170   (*j_env)->SetIntField(j_env, j_obj, FID_mg_data, (mg_s_long) data);
     170  (*j_env)->SetLongField(j_env, j_obj, FID_mg_data, (long) data);
    171171
    172172  /* Initialise MG environment variables */
     
    278278                         jlong j_docnum)
    279279{
    280   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     280  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    281281
    282282  char* index_path;
     
    363363                      jstring j_query)
    364364{
    365   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     365  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    366366
    367367  char* index_path;
     
    628628                     jboolean j_on)
    629629{
    630   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     630  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    631631
    632632  if (j_on) {
     
    643643                     jboolean j_on)
    644644{
    645   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     645  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    646646
    647647  if (j_on) {
     
    658658                        jint j_max)
    659659{
    660   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     660  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    661661  data->queryInfo->maxDocs = j_max;
    662662}
     
    681681                        jboolean j_on)
    682682{
    683   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     683  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    684684  data->queryInfo->needTermFreqs = j_on;
    685685}
     
    691691                      jstring j_index)
    692692{
    693   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     693  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    694694
    695695  /* Get the index name as a C string */
     
    717717                          jint j_mode)
    718718{
    719   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     719  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    720720  data->defaultBoolCombine = j_mode;
    721721}
     
    726726Java_org_greenstone_mg_MGWrapper_getQueryParams(JNIEnv *j_env, jobject j_obj)
    727727{
    728   MGWrapperData* data = (MGWrapperData*) (*j_env)->GetIntField(j_env, j_obj, FID_mg_data);
     728  MGWrapperData* data = (MGWrapperData*) (*j_env)->GetLongField(j_env, j_obj, FID_mg_data);
    729729  char result[512];  /* Assume this is big enough */
    730730
Note: See TracChangeset for help on using the changeset viewer.