From f9dade8fdfb62d62d14606268e3f7e5b692e15e6 Mon Sep 17 00:00:00 2001 From: weiyu Date: Fri, 12 Jul 2019 13:30:36 -0700 Subject: [PATCH] fix a bug in cds_func_exit --- cmodelint.cc | 7 +++++++ history.cc | 1 + 2 files changed, 8 insertions(+) diff --git a/cmodelint.cc b/cmodelint.cc index 734a9542..82bf974f 100644 --- a/cmodelint.cc +++ b/cmodelint.cc @@ -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()); } diff --git a/history.cc b/history.cc index 4ddba7b5..caf86ced 100644 --- a/history.cc +++ b/history.cc @@ -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); -- 2.34.1