fix a bug in cds_func_exit
authorweiyu <weiyuluo1232@gmail.com>
Fri, 12 Jul 2019 20:30:36 +0000 (13:30 -0700)
committerweiyu <weiyuluo1232@gmail.com>
Fri, 12 Jul 2019 20:30:36 +0000 (13:30 -0700)
cmodelint.cc
history.cc

index 734a95428097b6b78773d60f3d462a42ef62db5d..82bf974f03b99b7aaae1ecd7b4fd440ed05f104f 100644 (file)
@@ -395,5 +395,12 @@ void cds_func_exit(const char * funcName) {
        ModelHistory *history = model->get_history();
        func_id = history->getFuncMap()->get(funcName);
 
+       /* func_id not found; this could happen in the case where a function calls cds_func_entry
+       * when the model has been defined yet, but then an atomic inside the function initializes 
+       * the model. And then cds_func_exit is called upon the function exiting. 
+       */
+       if (func_id == 0)
+               return;
+
        history->exit_function(func_id, th->get_id());
 }
index 4ddba7b59ec6792237e0a46c57473ea92988dcac..caf86cedb46a46b2d72cc542c2598057d0b98fa2 100644 (file)
@@ -46,6 +46,7 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
        func_inst_lists->push_back( new func_inst_list_t() );
 }
 
+/* @param func_id a non-zero value */
 void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid)
 {
        uint32_t id = id_to_int(tid);