systemc: sc_spawn can create static or dynamic processes.
authorGabe Black <gabeblack@google.com>
Wed, 29 Aug 2018 06:32:50 +0000 (23:32 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 3 Oct 2018 00:14:21 +0000 (00:14 +0000)
Their status depends on when sc_spawn is run.

Change-Id: I826adf9d5c905687e705642130ca5ad725ce92af
Reviewed-on: https://gem5-review.googlesource.com/c/12441
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/sc_spawn.cc

index ecb0bbc3fdc5848209be25d98b9ed896856ee322..054feb8da0f8e998e83d2a91c42f208bb0dedafc 100644 (file)
@@ -31,6 +31,7 @@
 #include "systemc/core/process.hh"
 #include "systemc/core/process_types.hh"
 #include "systemc/core/scheduler.hh"
+#include "systemc/ext/core/sc_main.hh"
 #include "systemc/ext/core/sc_module.hh"
 #include "systemc/ext/core/sc_spawn.hh"
 
@@ -59,11 +60,15 @@ spawnWork(ProcessFuncWrapper *func, const char *name,
             name = ::sc_core::sc_gen_unique_name("thread_p");
     }
 
+    bool dynamic =
+        (::sc_core::sc_get_status() >
+         ::sc_core::SC_BEFORE_END_OF_ELABORATION);
+
     Process *proc;
     if (method)
-        proc = new Method(name, func, true);
+        proc = new Method(name, func, dynamic);
     else
-        proc = new Thread(name, func, true);
+        proc = new Thread(name, func, dynamic);
 
     if (opts) {
         for (auto e: opts->_events)