From 5d7c78d409f61448a104cda39916772557bf5845 Mon Sep 17 00:00:00 2001
From: KyleKlenk <kyle.c.klenk@gmail.com>
Date: Fri, 8 Jul 2022 10:39:45 -0600
Subject: [PATCH] fixed issue with job actor exiting Job actor would exit after
 fixing issue with file_access_actor causing a corrupted_double_linked_list

---
 .../file_access_actor/cppwrap_fileAccess.f90    |  1 +
 .../file_access_actor/file_access_actor.cpp     |  3 ++-
 build/source/actors/job_actor/job_actor.cpp     | 17 +++++++++++++----
 build/source/engine/mDecisions.f90              |  1 -
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/build/source/actors/file_access_actor/cppwrap_fileAccess.f90 b/build/source/actors/file_access_actor/cppwrap_fileAccess.f90
index db40b8b..7230830 100644
--- a/build/source/actors/file_access_actor/cppwrap_fileAccess.f90
+++ b/build/source/actors/file_access_actor/cppwrap_fileAccess.f90
@@ -129,6 +129,7 @@ subroutine initFailedHRUTracker(numGRU) bind(C, name="initFailedHRUTracker")
   implicit none
   integer(c_int), intent(in)        :: numGRU
 
+  if (allocated(failedHRUs))then; deallocate(failedHRUs); endif;
   allocate(failedHRUs(numGRU))
 
   failedHRUs(:) = .false.
diff --git a/build/source/actors/file_access_actor/file_access_actor.cpp b/build/source/actors/file_access_actor/file_access_actor.cpp
index b453461..166b272 100644
--- a/build/source/actors/file_access_actor/file_access_actor.cpp
+++ b/build/source/actors/file_access_actor/file_access_actor.cpp
@@ -18,6 +18,7 @@ namespace caf {
 behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU, int numGRU, 
     int outputStrucSize, std::string configPath, actor parent) {
     // Set File_Access_Actor variables
+    aout(self) << "\n----------File_Access_Actor Started----------\n";
     self->state.parent = parent;
     self->state.numGRU = numGRU;
     self->state.startGRU = startGRU;
@@ -186,7 +187,7 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU
 void initalizeFileAccessActor(stateful_actor<file_access_state>* self) {
     int indx = 1;
     int err = 0;
-    // aout(self) << "Set Up the forcing file" << std::endl;
+
     ffile_info_C(&indx, self->state.handle_forcing_file_info, &self->state.numFiles, &err);
     if (err != 0) {
         aout(self) << "Error: ffile_info_C - File_Access_Actor \n";
diff --git a/build/source/actors/job_actor/job_actor.cpp b/build/source/actors/job_actor/job_actor.cpp
index 3cdef19..14dc8c3 100644
--- a/build/source/actors/job_actor/job_actor.cpp
+++ b/build/source/actors/job_actor/job_actor.cpp
@@ -1,6 +1,8 @@
 #include "job_actor.hpp"
 #include "file_access_actor.hpp"
 #include "json.hpp"
+#include <chrono>
+#include <thread>
 #include "message_atoms.hpp"
 #include "global.hpp"
 #include "job_actor_subroutine_wrappers.hpp"
@@ -188,9 +190,17 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
 
         [=](file_access_actor_err, std::string function) {
             aout(self) << "Failure in File Access Actor in function" << function << "\n";
-            aout(self) << "Letting Parent Know we are quitting\n";
-            self->send(self->state.parent, err_v);
-            self->quit();
+            if (function == "def_output") {
+                aout(self) << "Error with the output file, will try creating it agian\n";
+                self->state.file_access_actor = self->spawn(file_access_actor, self->state.startGRU, self->state.numGRU, 
+                    self->state.outputStrucSize, self->state.configPath, self);
+            } else {
+                aout(self) << "Letting Parent Know we are quitting\n";
+                self->send(self->state.parent, err_v);
+                self->quit();
+            }
+
+
         }
     // *******************************************************************************************
     // ************************** END INTERFACE WITH FileAccessActor *****************************
@@ -199,7 +209,6 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
     };
 }
 
-
 void initJob(stateful_actor<job_state>* self) {
     std::string success = "Success"; // allows us to build the string
     if (self->state.outputCSV) {
diff --git a/build/source/engine/mDecisions.f90 b/build/source/engine/mDecisions.f90
index cc885c4..f04bd56 100755
--- a/build/source/engine/mDecisions.f90
+++ b/build/source/engine/mDecisions.f90
@@ -289,7 +289,6 @@ subroutine mDecisions(numSteps,err,message)
   if(dJulianFinsh < dJulianStart)then; err=20; message=trim(message)//'end time of simulation occurs before start time'; return; end if
 
   ! initialize the old time vector (time from the previous time step)
-  ! oldTime%var(:) = startTime%var(:)
 
   ! compute the number of time steps
   numSteps = nint( (dJulianFinsh - dJulianStart)*secprday/data_step ) + 1
-- 
GitLab