Changeset 59


Ignore:
Timestamp:
Jan 6, 2011, 10:50:56 PM (10 years ago)
Author:
djay
Message:

Small fix for binary string support in dupMaps function to ensure that the binary value willbe passed to various laguages correctly. Memory cleanup.

Location:
trunk/zoo-kernel
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-kernel/service.h

    r57 r59  
    418418      res->next=NULL;
    419419      map* mc=_cursor->content;
     420      map* tmp=getMap(mc,"size");
     421      char* tmpSized=NULL;
     422      if(tmp!=NULL){
     423        map* tmpV=getMap(mc,"value");
     424        tmpSized=(char*)malloc((atoi(tmp->value)+1)*sizeof(char));
     425        memmove(tmpSized,tmpV->value,atoi(tmp->value)*sizeof(char));
     426      }
    420427      if(mc!=NULL){
    421428        addMapToMap(&res->content,mc);
     429      }
     430      if(tmp!=NULL){
     431        map* tmpV=getMap(res->content,"value");
     432        free(tmpV->value);
     433        tmpV->value=(char*)malloc(atoi(tmp->value)*sizeof(char));
     434        memmove(tmpV->value,tmpSized,atoi(tmp->value)*sizeof(char));
     435        free(tmpSized);
    422436      }
    423437      res->next=dupMaps(&_cursor->next);
  • trunk/zoo-kernel/service_internal.c

    r58 r59  
    11051105      addToMap(errorMap,"text",_("No more information available"));
    11061106    nc3=createExceptionReportNode(m,errorMap,0);
     1107    freeMap(&errorMap);
     1108    free(errorMap);
    11071109    xmlAddChild(nc1,nc3);
    11081110    break;
     
    13271329                          || strncmp(tmp2->value,"application/",6)==0)) ){
    13281330      map* rs=getMap(m->content,"size");
     1331      bool isSized=true;
    13291332      if(rs==NULL){
    13301333        char tmp1[1024];
    13311334        sprintf(tmp1,"%d",strlen(toto->value));
    13321335        rs=createMap("z",tmp1);
     1336        isSized=false;
    13331337      }
    13341338      xmlAddChild(nc3,xmlNewText(BAD_CAST base64((const unsigned char*)toto->value,atoi(rs->value))));
     1339      if(!isSized){
     1340        freeMap(&rs);
     1341        free(rs);
     1342      }
    13351343    }
    13361344    else if(tmp!=NULL){
     
    16461654  while(tmpInputs!=NULL){
    16471655    maps *tmpMaps=getMaps(out1,tmpInputs->name);
    1648     /*fprintf(stderr,"IN LOOP\n");
    1649     dumpElements(tmpInputs);
    1650     dumpMaps(tmpMaps);
    1651     fprintf(stderr,"/ IN LOOP\n");*/
    16521656    if(tmpMaps==NULL){
    16531657      map* tmpMap1=getMap(tmpInputs->content,"minOccurs");
  • trunk/zoo-kernel/service_internal_java.c

    r57 r59  
    6262  options[1].optionString = "-Djava.compiler=NONE";
    6363
    64   vm_args.version = JNI_VERSION_1_4;
     64  vm_args.version = JNI_VERSION_1_2;
     65  JNI_GetDefaultJavaVMInitArgs(&vm_args);
    6566  vm_args.options = options;
    6667  vm_args.nOptions = 2;
     
    284285      jobject jv=(*env)->CallObjectMethod(env,tmp1,getValue_mid);
    285286
    286 #ifdef DEBUG
    287287      jstring jkd=(*env)->GetStringUTFChars(env, jk, NULL);
    288288      jstring jvd=(*env)->GetStringUTFChars(env, jv, NULL);
     289
     290#ifdef DEBUG
    289291      fprintf(stderr,"%s %s\n",jkd,jvd);
    290292#endif
    291293
    292294      if(res==NULL){
    293         res=createMap((*env)->GetStringUTFChars(env, jk, NULL),
    294                       (*env)->GetStringUTFChars(env, jv, NULL));
     295        res=createMap(jkd,jvd);
    295296      }else{
    296         addToMap(res,(*env)->GetStringUTFChars(env, jk, NULL),
    297                  (*env)->GetStringUTFChars(env, jv, NULL));
     297        addToMap(res,jkd,jvd);
    298298      }
     299      (*env)->ReleaseStringChars(env, jk, jkd);
     300      (*env)->ReleaseStringChars(env, jv, jvd);
     301
    299302    }
    300303    jobject jk=(*env)->CallObjectMethod(env,tmp,getKey_mid);
  • trunk/zoo-kernel/service_internal_python.c

    r58 r59  
    106106        freeMaps(real_outputs);
    107107        free(*real_outputs);
    108         //*real_inputs=mapsFromPyDict(arg2);
    109         //createMapsFromPyDict(real_outputs,arg3);
     108        freeMaps(main_conf);
     109        free(*main_conf);
    110110        *main_conf=mapsFromPyDict(arg1);
    111111        *real_outputs=mapsFromPyDict(arg3);
     
    134134        trace=NULL;
    135135        trace=PyObject_Str(ptype);
    136         if(PyString_Check(trace))
    137           sprintf(pbt,"%s\nTRACE : %s",strdup(pbt),PyString_AsString(trace));
     136        if(PyString_Check(trace)){
     137          char *tpbt=strdup(pbt);
     138          sprintf(pbt,"%s\nTRACE : %s",tpbt,PyString_AsString(trace));
     139          free(tpbt);
     140        }
    138141        else
    139142          fprintf(stderr,"EMPTY TRACE ?");
     
    148151        trace=PyObject_Str(pValue);
    149152        if(PyString_Check(trace))
    150           sprintf(pbt,"%s\nUnable to run your python process properly. Please check the following messages : %s",strdup(pbt),PyString_AsString(trace));
     153          sprintf(pbt,"%s\nUnable to run your python process properly. Please check the following messages : %s",pbt,PyString_AsString(trace));
    151154        else
    152           sprintf(pbt,"%s \n Unable to run your python process properly. Unable to provide any futher informations.",strdup(pbt));
     155          sprintf(pbt,"%s \n Unable to run your python process properly. Unable to provide any futher informations.",pbt);
    153156        map* err=createMap("text",pbt);
    154157        addToMap(err,"code","NoApplicableCode");
    155158        printExceptionReportResponse(m,err);
     159        Py_DECREF(arg1);
     160        Py_DECREF(arg2);
     161        Py_DECREF(arg3);
    156162        Py_XDECREF(pFunc);
    157163        Py_DECREF(pArgs);
    158164        Py_DECREF(pModule);
     165        Py_DECREF(ptraceback);
     166        Py_DECREF(ptype);
     167        Py_DECREF(pValue);
     168        Py_Finalize();
    159169        exit(-1);
    160170      }
     
    178188    exit(-1);
    179189  }
    180 #ifndef DEBUG
    181   // Failed when DEBUG is defined
    182190  Py_Finalize();
    183 #endif
    184191  return res;
    185192}
     
    189196  maps* tmp=t;
    190197  while(tmp!=NULL){
    191     if(PyDict_SetItem(res,PyString_FromString(tmp->name),(PyObject*)PyDict_FromMap(tmp->content))<0){
     198    PyObject* subc=PyDict_FromMap(tmp->content);
     199    if(PyDict_SetItem(res,PyString_FromString(tmp->name),subc)<0){
    192200      fprintf(stderr,"Unable to parse params...");
    193201      exit(1);
    194202    }
     203    Py_DECREF(subc);
    195204    tmp=tmp->next;
    196205  } 
     
    202211  map* tmp=t;
    203212  map* size=getMap(tmp,"size");
    204   dumpMap(t);
    205213  while(tmp!=NULL){
    206     fprintf(stderr,"%s => %s\n"),tmp->name,tmp->value;
     214    PyObject* name=PyString_FromString(tmp->name);
    207215    if(strcasecmp(tmp->name,"value")==0){
    208216      if(size!=NULL){
    209         if(PyDict_SetItem(res,PyString_FromString(tmp->name),PyString_FromStringAndSize(tmp->value,(Py_ssize_t) atoi(size->value)))<0){
     217        PyObject* value=PyString_FromStringAndSize(tmp->value,atoi(size->value));
     218        if(PyDict_SetItem(res,name,value)<0){
    210219          fprintf(stderr,"Unable to parse params...");
    211220          exit(1);
    212221        }
     222        Py_DECREF(value);
    213223      }
    214       else
    215         if(PyDict_SetItem(res,PyString_FromString(tmp->name),PyString_FromString(tmp->value))<0){
     224      else{
     225        PyObject* value=PyString_FromString(tmp->value);
     226        if(PyDict_SetItem(res,name,value)<0){
    216227          fprintf(stderr,"Unable to parse params...");
    217228          exit(1);
    218229        }
    219     }
    220     else
    221       if(PyDict_SetItem(res,PyString_FromString(tmp->name),PyString_FromString(tmp->value))<0){
     230        Py_DECREF(value);
     231      }
     232    }
     233    else{
     234      PyObject* value=PyString_FromString(tmp->value);
     235      if(PyDict_SetItem(res,name,value)<0){
    222236        fprintf(stderr,"Unable to parse params...");
    223237        exit(1);
    224238      }
     239      Py_DECREF(value);
     240    }
     241    Py_DECREF(name);
    225242    tmp=tmp->next;
    226243  }
     
    244261            PyString_AsString(key),PyString_AsString(value));
    245262#endif
    246     while(cursor!=NULL){
    247       cursor=cursor->next;
    248     }
    249263    cursor=(maps*)malloc(MAPS_SIZE);
    250264    cursor->name=PyString_AsString(key);
     
    255269    cursor->next=NULL;
    256270    if(res==NULL)
    257       res=cursor;
     271      res=dupMaps(&cursor);
    258272    else
    259273      addMapsToMaps(&res,cursor);
     274    freeMap(&cursor->content);
     275    free(cursor->content);
     276    free(cursor);
    260277#ifdef DEBUG
    261278    dumpMaps(res);
     
    263280#endif
    264281  }
     282  Py_DECREF(list);
    265283  return res;
    266284}
  • trunk/zoo-kernel/zoo_service_loader.c

    r58 r59  
    954954                map* tmpMap=getMap(tmpmaps->content,"value");
    955955                if(tmpMap!=NULL){
     956                  free(tmpMap->value);
    956957                  tmpMap->value=(char*)malloc((res.nDataLen+1)*sizeof(char));
    957958                  memmove(tmpMap->value,tmpContent,(res.nDataLen)*sizeof(char));
    958959                  tmpMap->value[res.nDataLen]=0;
    959                   fprintf(stderr,"%d = %d ?\n",res.nDataLen/sizeof(char),strlen(tmpContent));
    960                   if(strlen(tmpContent)!=res.nDataLen/sizeof(char)){
     960                  if(strlen(tmpContent)!=res.nDataLen){
    961961                    char tmp[256];
    962                     sprintf(tmp,"%d",res.nDataLen);
     962                    sprintf(tmp,"%d",res.nDataLen*sizeof(char));
    963963                    addToMap(tmpmaps->content,"size",tmp);
    964964                  }
    965                   /*FILE* fd=fopen("/tmp/test.png","w");
    966                   fwrite(tmpContent,1,(res.nDataLen)*sizeof(char),fd);
    967                   fclose(fd);
    968                   dumpMap(tmpMap);*/
    969965                }
    970966                free(tmpContent);
     
    982978        else
    983979          addMapsToMaps(&request_input_real_format,tmpmaps);
    984         /*freeMap(&tmpmaps->content);
    985         free(tmpmaps->content);
    986         tmpmaps->content=NULL;*/
    987980        freeMaps(&tmpmaps);
    988981        free(tmpmaps);
    989           //}
    990982        tmpmaps=NULL;
    991983        free(tmp);
     
    18051797  freeService(&s1);
    18061798  free(s1);
    1807   //For Python language support only
    1808   //freeMaps(&m);
     1799  freeMaps(&m);
    18091800  free(m);
    18101801 
     
    18121803  free(request_input_real_format);
    18131804 
    1814   /* The following is requested but get issue using with Python support :/ */
    1815   /* freeMaps(&request_output_real_format);
    1816      free(request_output_real_format);*/
     1805  freeMaps(&request_output_real_format);
     1806  free(request_output_real_format);
    18171807 
    18181808  free(REQUEST);
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png