getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] (no subject)


From: Liang Jin Lim
Subject: [Getfem-commits] (no subject)
Date: Tue, 10 Jul 2018 08:03:18 -0400 (EDT)

branch: race_condition_in_ga_define_function
commit 0b374e427d6a165726ff88ce74fe66e36ddf2392
Author: lj <address@hidden>
Date:   Tue Jul 10 14:01:53 2018 +0200

    Fix race condition, define function should be called without additional 
check if the function exists.
---
 src/getfem_generic_assembly_semantic.cc | 60 ++++++++++++---------------------
 1 file changed, 22 insertions(+), 38 deletions(-)

diff --git a/src/getfem_generic_assembly_semantic.cc 
b/src/getfem_generic_assembly_semantic.cc
index 8d05147..f1ebbff 100644
--- a/src/getfem_generic_assembly_semantic.cc
+++ b/src/getfem_generic_assembly_semantic.cc
@@ -3546,13 +3546,11 @@ namespace getfem {
           case 2: case 3:
             {
               child0->name = "DER_PDFUNC_" + child0->name;
-              if (!(ga_function_exists(child0->name))) {
-                if (F.dtype() == 2)
-                  ga_define_function(child0->name, 1, F.derivative1());
-                else {
-                  std::string expr=ga_derivative_scalar_function(F.expr(),"t");
-                  ga_define_function(child0->name, 1, expr);
-                }
+              if (F.dtype() == 2)
+                ga_define_function(child0->name, 1, F.derivative1());
+              else {
+                std::string expr = ga_derivative_scalar_function(F.expr(),"t");
+                ga_define_function(child0->name, 1, expr);
               }
               // Inline extension if the derivative is affine (for instance
               // for sqr)
@@ -3613,15 +3611,12 @@ namespace getfem {
               break;
             case 2:
               child0->name = "DER_PDFUNC1_" + child0->name;
-              if (!(ga_function_exists(child0->name)))
-                ga_define_function(child0->name, 2, F.derivative1());
+              ga_define_function(child0->name, 2, F.derivative1());
               break;
             case 3:
               child0->name = "DER_PDFUNC1_" + child0->name;
-              if (!(ga_function_exists(child0->name))) {
-                std::string expr = ga_derivative_scalar_function(F.expr(), 
"t");
-                ga_define_function(child0->name, 2, expr);
-              }
+              std::string expr = ga_derivative_scalar_function(F.expr(), "t");
+              ga_define_function(child0->name, 2, expr);
               break;
             }
             tree.insert_node(pnode, GA_NODE_OP);
@@ -3649,15 +3644,12 @@ namespace getfem {
               break;
             case 2:
               child0->name = "DER_PDFUNC2_" + child0->name;
-              if (!(ga_function_exists(child0->name)))
-                ga_define_function(child0->name, 2, F.derivative2());
+              ga_define_function(child0->name, 2, F.derivative2());
               break;
             case 3:
               child0->name = "DER_PDFUNC2_" + child0->name;
-              if (!(ga_function_exists(child0->name))) {
-                std::string expr = ga_derivative_scalar_function(F.expr(), 
"u");
-                ga_define_function(child0->name, 2, expr);
-              }
+              std::string expr = ga_derivative_scalar_function(F.expr(), "u");
+              ga_define_function(child0->name, 2, expr);
               break;
             }
             tree.insert_node(pnode, GA_NODE_OP);
@@ -4539,13 +4531,11 @@ namespace getfem {
           case 2: case 3:
             {
               child0->name = "DER_PDFUNC_" + child0->name;
-              if (!(ga_function_exists(child0->name))) {
-                if (F.dtype() == 2)
-                  ga_define_function(child0->name, 1, F.derivative1());
-                else {
-                  std::string expr=ga_derivative_scalar_function(F.expr(),"t");
-                  ga_define_function(child0->name, 1, expr);
-                }
+              if (F.dtype() == 2)
+                ga_define_function(child0->name, 1, F.derivative1());
+              else {
+                std::string expr=ga_derivative_scalar_function(F.expr(),"t");
+                ga_define_function(child0->name, 1, expr);
               }
               // Inline extension if the derivative is affine (for instance
               // for sqr)
@@ -4612,15 +4602,12 @@ namespace getfem {
               break;
             case 2:
               child0->name = "DER_PDFUNC1_" + child0->name;
-              if (!(ga_function_exists(child0->name)))
-                ga_define_function(child0->name, 2, F.derivative1());
+              ga_define_function(child0->name, 2, F.derivative1());
               break;
             case 3:
               child0->name = "DER_PDFUNC1_" + child0->name;
-              if (!(ga_function_exists(child0->name))) {
-                std::string expr = ga_derivative_scalar_function(F.expr(), 
"t");
-                ga_define_function(child0->name, 2, expr);
-              }
+              std::string expr = ga_derivative_scalar_function(F.expr(), "t");
+              ga_define_function(child0->name, 2, expr);
               break;
             }
             tree.insert_node(pnode, GA_NODE_OP);
@@ -4654,15 +4641,12 @@ namespace getfem {
               break;
             case 2:
               child0->name = "DER_PDFUNC2_" + child0->name;
-              if (!(ga_function_exists(child0->name)))
-                ga_define_function(child0->name, 2, F.derivative2());
+              ga_define_function(child0->name, 2, F.derivative2());
               break;
             case 3:
               child0->name = "DER_PDFUNC2_" + child0->name;
-              if (!(ga_function_exists(child0->name))) {
-                std::string expr = ga_derivative_scalar_function(F.expr(), 
"u");
-                ga_define_function(child0->name, 2, expr);
-              }
+              std::string expr = ga_derivative_scalar_function(F.expr(), "u");
+              ga_define_function(child0->name, 2, expr);
               break;
             }
             tree.insert_node(pnode, GA_NODE_OP);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]