Changeset 19f4fb15 in OpenModelica


Ignore:
Timestamp:
2014-06-01T17:03:20+02:00 (10 years ago)
Author:
Adeel Asghar <adeel.asghar@…>
Branches:
Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
Children:
2603d68
Parents:
bcc9fb24
Message:

#2706

  • Fixed the FMU memmory allocation & free memory issues.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@20915 f25d12d1-65f4-0310-ae8a-bbce733d8d8e

Location:
SimulationRuntime/fmi/export
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • SimulationRuntime/fmi/export/fmi1/fmu1_model_interface.c

    rf90dc5b4 r19f4fb15  
    109109}
    110110
    111 fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID,
    112     fmiCallbackFunctions functions, fmiBoolean loggingOn)
     111fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID, fmiCallbackFunctions functions, fmiBoolean loggingOn)
    113112{
    114113  ModelInstance* comp;
     
    131130  comp = (ModelInstance *)functions.allocateMemory(1, sizeof(ModelInstance));
    132131  if (comp) {
     132    comp->instanceName = functions.allocateMemory(1 + strlen(instanceName), sizeof(char));
     133    comp->GUID = functions.allocateMemory(1 + strlen(GUID), sizeof(char));
    133134    DATA* fmudata = (DATA *)functions.allocateMemory(1, sizeof(DATA));
    134135    threadData_t *threadData = (threadData_t *)functions.allocateMemory(1, sizeof(threadData));
     
    140141      return NULL;
    141142    }
    142   }else{
    143     functions.logger(NULL, instanceName, fmiError, "error",
    144         "fmiInstantiateModel: Out of memory.");
     143  }
     144  if (!comp || !comp->instanceName || !comp->GUID) {
     145    functions.logger(NULL, instanceName, fmiError, "error", "fmiInstantiateModel: Out of memory.");
    145146    return NULL;
    146147  }
     
    158159  modelInfoXmlInit(&(comp->fmuData->modelData.modelDataXml));
    159160
    160   comp->instanceName = instanceName;
    161   comp->GUID = GUID;
     161  strcpy(comp->instanceName, instanceName);
     162  strcpy(comp->GUID, GUID);
    162163  comp->functions = functions;
    163164  comp->loggingOn = loggingOn;
     
    184185  if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log",
    185186      "fmiFreeModelInstance");
     187
     188  /* free instanceName & GUID */
     189  if (comp->instanceName) comp->functions.freeMemory(comp->instanceName);
     190  if (comp->GUID) comp->functions.freeMemory(comp->GUID);
     191  /* free comp */
    186192  comp->functions.freeMemory(comp);
    187193}
     
    769775      "fmiTerminate");
    770776
     777  comp->state = modelTerminated;
    771778  /* deinitDelay(comp->fmuData); */
    772779  comp->fmuData->callback->callExternalObjectDestructors(comp->fmuData);
     
    780787  freeStateSetData(comp->fmuData);
    781788  deInitializeDataStruc(comp->fmuData);
     789  comp->functions.freeMemory(comp->fmuData->threadData);
    782790  comp->functions.freeMemory(comp->fmuData);
    783791
  • SimulationRuntime/fmi/export/fmi2/fmu2_model_interface.c

    rbcc9fb24 r19f4fb15  
    195195    }
    196196  }
    197   if (!comp || !comp->instanceName || !comp->GUID || !comp->fmuData) {
     197  if (!comp || !comp->instanceName || !comp->GUID) {
    198198    functions->logger(functions->componentEnvironment, instanceName, fmiError, "error", "fmiInstantiate: Out of memory.");
    199199    return NULL;
Note: See TracChangeset for help on using the changeset viewer.