increase ref of the additional arguments before the call of macro. 75/11475/2
Cedric Delamarre [Fri, 10 May 2013 15:02:54 +0000 (17:02 +0200)]
Change-Id: I069a33cc8a8205aca26b072688baa72f067f6654

scilab/modules/differential_equations/src/cpp/differentialequationfunctions.cpp

index 16ea522..c56fc94 100644 (file)
@@ -969,11 +969,17 @@ int DifferentialEquationFunctions::callOdeMacroF(int* n, double* t, double* y, d
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -1195,11 +1201,17 @@ double DifferentialEquationFunctions::callIntgMacroF(double* t)
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -1261,11 +1273,17 @@ double DifferentialEquationFunctions::callInt2dMacroF(double* x, double* y)
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -1334,11 +1352,17 @@ double DifferentialEquationFunctions::callInt3dMacroF(double* xyz, int* numfun,
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -1412,11 +1436,17 @@ int DifferentialEquationFunctions::callFevalMacroF(int* nn, double* x1, double*
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 1;
@@ -1891,11 +1921,17 @@ int DifferentialEquationFunctions::callImplMacroF(int* neq, double* t, double* y
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -1977,11 +2013,17 @@ int DifferentialEquationFunctions::callImplMacroG(int* neq, double* t, double* y
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallGFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -2057,11 +2099,17 @@ int DifferentialEquationFunctions::callImplMacroJac(int* neq, double* t, double*
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallJacFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -2143,11 +2191,17 @@ int DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double*
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -2246,11 +2300,17 @@ int DifferentialEquationFunctions::callDasslMacroJac(double* t, double* y, doubl
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallJacFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;
@@ -2335,11 +2395,17 @@ int DifferentialEquationFunctions::callDasrtMacroG(int* ny, double* t, double* y
 
         for (int i = 0; i < m_FArgs.size(); i++)
         {
+            m_FArgs[i]->IncreaseRef();
             in.push_back(m_FArgs[i]);
         }
 
         bool bOk = m_pCallGFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
 
+        for (int i = 0; i < m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
         if (bOk == false)
         {
             return 0;