Ack with minor comment marked AndersW> regards,
Anders Widell On 01/13/2017 10:40 AM, Hans Nordeback wrote: > src/amf/amfd/ckpt_dec.cc | 2 + > src/amf/amfd/clm.cc | 2 + > src/amf/amfd/csi.cc | 7 ++++- > src/amf/amfd/node.cc | 4 ++- > src/amf/amfd/nodegroup.cc | 4 ++- > src/amf/amfd/si_dep.cc | 1 + > src/amf/amfnd/pgdb.cc | 4 +- > src/amf/amfnd/su.cc | 2 + > src/base/logtrace.c | 18 +++++++++--- > src/base/logtrace.h | 48 > ++++++++++++++++++++++++++++++++++++ > src/imm/agent/imma_init.cc | 7 +++- > src/imm/agent/imma_om_api.cc | 2 - > src/imm/immnd/ImmModel.cc | 16 ++++++------ > src/imm/immpbed/immpbe_daemon.cc | 4 ++- > src/log/logd/lgs_imm_gcfg.cc | 2 + > src/log/logd/lgs_main.cc | 2 + > src/log/logd/lgs_mbcsv.cc | 2 + > src/ntf/ntfd/NtfClient.cc | 2 +- > src/smf/smfd/SmfCampaignXmlParser.cc | 3 ++ > src/smf/smfd/SmfUpgradeStep.cc | 3 ++ > 20 files changed, 111 insertions(+), 24 deletions(-) > > > diff --git a/src/amf/amfd/ckpt_dec.cc b/src/amf/amfd/ckpt_dec.cc > --- a/src/amf/amfd/ckpt_dec.cc > +++ b/src/amf/amfd/ckpt_dec.cc > @@ -370,6 +370,8 @@ static uint32_t dec_app_config(AVD_CL_CB > uint32_t status = NCSCC_RC_SUCCESS; > AVD_APP app; > > + TRACE_ENTER(); > + > osafassert(dec->i_action == NCS_MBCSV_ACT_UPDATE); > decode_app(&dec->i_uba, &app); > > diff --git a/src/amf/amfd/clm.cc b/src/amf/amfd/clm.cc > --- a/src/amf/amfd/clm.cc > +++ b/src/amf/amfd/clm.cc > @@ -83,6 +83,8 @@ static void clm_node_exit_validate(AVD_A > bool reject = false; > SaAisErrorT rc = SA_AIS_OK; > > + TRACE_ENTER(); > + > /* > * Reject validate step on self node as this is active controller > */ > diff --git a/src/amf/amfd/csi.cc b/src/amf/amfd/csi.cc > --- a/src/amf/amfd/csi.cc > +++ b/src/amf/amfd/csi.cc > @@ -831,6 +831,7 @@ static void ccb_apply_delete_hdlr(CcbUti > > bool first_sisu = true; > > + TRACE_ENTER(); > if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) { > /* A double check whether csi has been deleted from DB or not > and whether pointer stored userData > is still valid. */ > @@ -851,7 +852,7 @@ static void ccb_apply_delete_hdlr(CcbUti > goto done; > } > > - TRACE_ENTER2("'%s'", csi ? csi->name.c_str() : nullptr); > + TRACE("'%s'", csi ? csi->name.c_str() : nullptr); > > /* Check whether si has been assigned to any SU. */ > if ((nullptr != csi->si->list_of_sisu) && > @@ -992,6 +993,8 @@ static void csi_ccb_apply_modify_hdlr(st > **************************************************************************/ > static void csi_ccb_apply_create_hdlr(struct CcbUtilOperationData *opdata) > { > + TRACE_ENTER(); > + > AVD_CSI *csi = nullptr; > if ((csi = csi_db->find(Amf::to_string(&opdata->objectName))) == > nullptr) { > /* this check is added because, some times there is > @@ -1027,6 +1030,8 @@ SaAisErrorT csi_assign_hdlr(AVD_CSI *csi > AVD_COMP_CSI_REL *compcsi; > SaAisErrorT rc = SA_AIS_ERR_NO_OP; > > + TRACE_ENTER(); > + > /* Check whether csi assignment is already in progress and if yes, then > return. > This csi will be assigned after the undergoing csi assignment gets > over.*/ > if (csi->si->list_of_sisu != nullptr) { > diff --git a/src/amf/amfd/node.cc b/src/amf/amfd/node.cc > --- a/src/amf/amfd/node.cc > +++ b/src/amf/amfd/node.cc > @@ -891,7 +891,9 @@ static void node_ccb_apply_cb(CcbUtilOpe > void node_admin_state_set(AVD_AVND *node, SaAmfAdminStateT admin_state) > { > SaAmfAdminStateT old_state = node->saAmfNodeAdminState; > - > + > + TRACE_ENTER(); > + > if (old_state == admin_state) > return; > osafassert(admin_state <= SA_AMF_ADMIN_SHUTTING_DOWN); > diff --git a/src/amf/amfd/nodegroup.cc b/src/amf/amfd/nodegroup.cc > --- a/src/amf/amfd/nodegroup.cc > +++ b/src/amf/amfd/nodegroup.cc > @@ -467,13 +467,15 @@ static SaAisErrorT ng_ccb_completed_dele > AVD_AVND *node; > AVD_AMF_NG *ng = avd_ng_get(Amf::to_string(&opdata->objectName)); > > + TRACE_ENTER(); > + > if (ng == nullptr) { > LOG_WA("Could not find %s in nodegroup_db", > osaf_extended_name_borrow(&opdata->objectName)); > TRACE_LEAVE(); > return SA_AIS_OK; > } > > - TRACE_ENTER2("%u", ng->number_nodes()); > + TRACE("%u", ng->number_nodes()); > std::set<std::string>::const_iterator iter; > if ((ng->saAmfNGAdminState != SA_AMF_ADMIN_LOCKED) && > (ng->saAmfNGAdminState != SA_AMF_ADMIN_UNLOCKED) && > diff --git a/src/amf/amfd/si_dep.cc b/src/amf/amfd/si_dep.cc > --- a/src/amf/amfd/si_dep.cc > +++ b/src/amf/amfd/si_dep.cc > @@ -1426,6 +1426,7 @@ void avd_sidep_start_tolerance_timer_for > { > AVD_SI_DEP *si_dep_rec; > > + TRACE_ENTER(); > TRACE("dep_si:%s > spons_si:%s",dep_si->name.c_str(),spons_si->name.c_str()); > > si_dep_rec = sidep_db_find(spons_si->name, dep_si->name); > diff --git a/src/amf/amfnd/pgdb.cc b/src/amf/amfnd/pgdb.cc > --- a/src/amf/amfnd/pgdb.cc > +++ b/src/amf/amfnd/pgdb.cc > @@ -385,7 +385,7 @@ AVND_PG_MEM *avnd_pgdb_mem_rec_rmv(AVND_ > void avnd_pgdb_mem_rec_del(AVND_CB *cb, AVND_PG *pg, const std::string& > comp_name) > { > AVND_PG_MEM *pg_mem = 0; > - TRACE_LEAVE(); > + TRACE_ENTER(); > > /* remove the pg mem record */ > pg_mem = avnd_pgdb_mem_rec_rmv(cb, pg, comp_name); > @@ -415,7 +415,7 @@ void avnd_pgdb_mem_rec_del(AVND_CB *cb, > void avnd_pgdb_mem_rec_del_all(AVND_CB *cb, AVND_PG *pg) > { > AVND_PG_MEM *curr = 0; > - TRACE_LEAVE(); > + TRACE_ENTER(); > > while (0 != (curr = (AVND_PG_MEM > *)m_NCS_DBLIST_FIND_FIRST(&pg->mem_list))) > avnd_pgdb_mem_rec_del(cb, pg, > Amf::to_string(&curr->info.member.compName)); > diff --git a/src/amf/amfnd/su.cc b/src/amf/amfnd/su.cc > --- a/src/amf/amfnd/su.cc > +++ b/src/amf/amfnd/su.cc > @@ -907,6 +907,8 @@ static uint32_t avnd_process_comp_csi_ms > uint32_t rc = NCSCC_RC_SUCCESS; > std::map<MDS_DEST, MDS_SVC_PVT_SUB_PART_VER>::iterator iter; > > + TRACE_ENTER(); > + > /* > Callback is sent in the following cases: > -a PI comp: CSI is assigned to this component. > diff --git a/src/base/logtrace.c b/src/base/logtrace.c > --- a/src/base/logtrace.c > +++ b/src/base/logtrace.c > @@ -80,7 +80,7 @@ static void sighup_handler(int sig) > setlogmask(logmask); > } > > -static void output(const char *file, unsigned int line, int priority, int > category, const char *format, va_list ap) > +void output_(const char *file, unsigned int line, int priority, int > category, const char *format, va_list ap) > { > int i; > struct timeval tv; > @@ -162,23 +162,31 @@ void _logtrace_log(const char *file, uns > if (!(category_mask & (1 << CAT_LOG))) > goto done; > > - output(file, line, priority, CAT_LOG, format, ap2); > + output_(file, line, priority, CAT_LOG, format, ap2); > > done: > va_end(ap); > va_end(ap2); > } > > +bool is_trace_enabled_(unsigned int category) > +{ > + /* Filter on category */ > + if (!(category_mask & (1 << category))) > + return false; > + else > + return true; > +} > + AndersW> The above if-statement can be simplified by replacing it with: return (category_mask & (1 << category)) != 0; > void _logtrace_trace(const char *file, unsigned int line, unsigned int > category, const char *format, ...) > { > va_list ap; > > - /* Filter on category */ > - if (!(category_mask & (1 << category))) > + if (is_trace_enabled_(category) == false) > return; > > va_start(ap, format); > - output(file, line, LOG_DEBUG, category, format, ap); > + output_(file, line, LOG_DEBUG, category, format, ap); > va_end(ap); > } > > diff --git a/src/base/logtrace.h b/src/base/logtrace.h > --- a/src/base/logtrace.h > +++ b/src/base/logtrace.h > @@ -34,6 +34,7 @@ > #define BASE_LOGTRACE_H_ > > #include <syslog.h> > +#include <stdarg.h> > #include "base/ncsgl_defs.h" > #ifdef __cplusplus > extern "C" { > @@ -122,6 +123,9 @@ extern void _logtrace_log(const char *fi > extern void _logtrace_trace(const char *file, unsigned int line, unsigned > int category, > const char *format, ...) __attribute__ > ((format(printf, 4, 5))); > > +extern bool is_trace_enabled_(unsigned int category); > +extern void output_(const char *file, unsigned int line, int priority, int > category, const char *format, va_list ap); > + > /* LOG API. Use same levels as syslog */ > #define LOG_EM(format, args...) _logtrace_log(__FILE__, __LINE__, > LOG_EMERG, (format), ##args) > #define LOG_AL(format, args...) _logtrace_log(__FILE__, __LINE__, > LOG_ALERT, (format), ##args) > @@ -141,10 +145,54 @@ extern void _logtrace_trace(const char * > #define TRACE_6(format, args...) _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE6, (format), ##args) > #define TRACE_7(format, args...) _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE7, (format), ##args) > #define TRACE_8(format, args...) _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE8, (format), ##args) > + > +#ifdef __cplusplus > +class Trace { > + public: > + Trace() {} > + ~Trace() { > + if (!trace_leave_called && is_trace_enabled_(CAT_TRACE_LEAVE)) { > + va_list ap; > + output_(file_, 0, LOG_DEBUG, CAT_TRACE_LEAVE, function_, ap); > + } > + } > + void trace(const char *file, const char *function, unsigned int line, > unsigned int category, const char *format, ...) { > + va_list ap; > + if (is_trace_enabled_(category)) { > + file_ = file; > + function_ = function; > + va_start(ap, format); > + output_(file, line, LOG_DEBUG, category, format, ap); > + va_end(ap); > + } > + } > + > + void trace_leave(const char *file, unsigned int line, unsigned int > category, const char *format, ...) { > + va_list ap; > + if (is_trace_enabled_(category)) { > + va_start(ap, format); > + trace_leave_called = true; > + output_(file, line, LOG_DEBUG, category, format, ap); > + va_end(ap); > + } > + } > + private: > + bool trace_leave_called {false}; > + const char* file_{nullptr}; > + const char* function_{nullptr}; > +}; > + > +#define TRACE_ENTER() Trace t_; t_.trace(__FILE__, > __FUNCTION__, __LINE__, CAT_TRACE_ENTER, "%s ", __FUNCTION__) > +#define TRACE_ENTER2(format, args...) Trace t_; t_.trace(__FILE__, > __FUNCTION__, __LINE__, CAT_TRACE_ENTER, "%s: " format, __FUNCTION__, ##args) > + > +#define TRACE_LEAVE() t_.trace_leave(__FILE__, __LINE__, > CAT_TRACE_LEAVE, "%s ", __FUNCTION__) > +#define TRACE_LEAVE2(format, args...) t_.trace_leave(__FILE__, __LINE__, > CAT_TRACE_LEAVE, "%s: " format, __FUNCTION__, ##args) > +#else > #define TRACE_ENTER() _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE_ENTER, "%s ", __FUNCTION__) > #define TRACE_ENTER2(format, args...) _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE_ENTER, "%s: " format, __FUNCTION__, ##args) > #define TRACE_LEAVE() _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE_LEAVE, "%s ", __FUNCTION__) > #define TRACE_LEAVE2(format, args...) _logtrace_trace(__FILE__, __LINE__, > CAT_TRACE_LEAVE, "%s: " format, __FUNCTION__, ##args) > +#endif > > #ifdef __cplusplus > } > diff --git a/src/imm/agent/imma_init.cc b/src/imm/agent/imma_init.cc > --- a/src/imm/agent/imma_init.cc > +++ b/src/imm/agent/imma_init.cc > @@ -261,6 +261,8 @@ unsigned int imma_startup(NCSMDS_SVC_ID > { > unsigned int rc = NCSCC_RC_SUCCESS; > > + TRACE_ENTER(); > + > int pt_err = pthread_mutex_lock(&imma_agent_lock); > if(pt_err) { > TRACE_4("Could not obtain mutex lock error(%u):%s", > @@ -269,7 +271,7 @@ unsigned int imma_startup(NCSMDS_SVC_ID > goto done_nolock; > } > > - TRACE_ENTER2("use count %u", imma_use_count); > + TRACE("use count %u", imma_use_count); > > if (imma_use_count > 0) { > /* Already created, so just increment the use_count */ > @@ -321,6 +323,7 @@ unsigned int imma_shutdown(NCSMDS_SVC_ID > { > uint32_t rc = NCSCC_RC_SUCCESS; > > + TRACE_ENTER(); > int pt_err = pthread_mutex_lock(&imma_agent_lock); > if(pt_err) { > TRACE_4("Could not obtain mutex lock error(%u):%s", > @@ -329,7 +332,7 @@ unsigned int imma_shutdown(NCSMDS_SVC_ID > goto done_nolock; > } > > - TRACE_ENTER2("use count %u", imma_use_count); > + TRACE("use count %u", imma_use_count); > > if (imma_use_count > 1) { > /* Users still exist, just decrement the use count */ > diff --git a/src/imm/agent/imma_om_api.cc b/src/imm/agent/imma_om_api.cc > --- a/src/imm/agent/imma_om_api.cc > +++ b/src/imm/agent/imma_om_api.cc > @@ -4989,7 +4989,6 @@ SaAisErrorT saImmOmClassDescriptionGet_2 > IMMSV_EVT *out_evt = NULL; > IMMA_CLIENT_NODE *cl_node = NULL; > SaTimeT timeout = 0; > - TRACE_ENTER(); > > if (cb->sv_id == 0) { > TRACE_2("ERR_BAD_HANDLE: No initialized handle exists!"); > @@ -9375,7 +9374,6 @@ SaAisErrorT saImmOmCcbGetErrorStrings(Sa > IMMA_CCB_NODE *ccb_node = NULL; > SaImmHandleT immHandle=0LL; > IMMA_CLIENT_NODE *cl_node = NULL; > - TRACE_ENTER(); > > if (cb->sv_id == 0) { > TRACE_2("ERR_BAD_HANDLE: No initialized handle exists!"); > diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc > --- a/src/imm/immnd/ImmModel.cc > +++ b/src/imm/immnd/ImmModel.cc > @@ -3898,7 +3898,7 @@ ImmModel::oneSafe2PBEAllowed() > //TRACE_ENTER(); > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -3920,7 +3920,7 @@ ImmModel::protocol43Allowed() > //TRACE_ENTER(); > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -3942,7 +3942,7 @@ ImmModel::protocol45Allowed() > //TRACE_ENTER(); > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -3964,7 +3964,7 @@ ImmModel::protocol46Allowed() > //TRACE_ENTER(); > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -3986,7 +3986,7 @@ ImmModel::protocol47Allowed() > //TRACE_ENTER(); > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -4012,7 +4012,7 @@ ImmModel::protocol50Allowed() > } > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -4039,7 +4039,7 @@ ImmModel::protocol51Allowed() > } > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > @@ -4062,7 +4062,7 @@ ImmModel::protocol41Allowed() > //TRACE_ENTER(); > ObjectMap::iterator oi = sObjectMap.find(immObjectDn); > if(oi == sObjectMap.end()) { > - TRACE_LEAVE(); > + //TRACE_LEAVE(); > return false; > } > > diff --git a/src/imm/immpbed/immpbe_daemon.cc > b/src/imm/immpbed/immpbe_daemon.cc > --- a/src/imm/immpbed/immpbe_daemon.cc > +++ b/src/imm/immpbed/immpbe_daemon.cc > @@ -1561,6 +1561,8 @@ static SaAisErrorT saImmOiCcbObjectCreat > unsigned int msecs_waited = 0; > std::string objectDn; > > + TRACE_ENTER(); > + > if(parentName != NULL && !osaf_is_extended_name_empty(parentName)) { > TRACE_ENTER2("CREATE CALLBACK CCB:%llu class:%s parent:%s", > ccbId, className, osaf_extended_name_borrow(parentName)); > } else { > @@ -2219,7 +2221,7 @@ void pbeDaemon(SaImmHandleT immHandle, v > immutilWrapperProfile.retryInterval = 400; > immutilWrapperProfile.nTries = 5; > > - > + TRACE_ENTER(); > LOG_NO("pbeDaemon starting with obj-count:%u", sObjCount); > > /* Restore also sClassCount. */ > diff --git a/src/log/logd/lgs_imm_gcfg.cc b/src/log/logd/lgs_imm_gcfg.cc > --- a/src/log/logd/lgs_imm_gcfg.cc > +++ b/src/log/logd/lgs_imm_gcfg.cc > @@ -531,6 +531,8 @@ static const SaImmOiCallbacksT_2 callbac > static void save_network_name(char* new_name) { > uint32_t name_len = 0; > > + TRACE_ENTER(); > + > osaf_mutex_lock_ordie(&lgs_gcfg_applier_mutex); > > /* Delete old name */ > diff --git a/src/log/logd/lgs_main.cc b/src/log/logd/lgs_main.cc > --- a/src/log/logd/lgs_main.cc > +++ b/src/log/logd/lgs_main.cc > @@ -480,6 +480,8 @@ int main(int argc, char *argv[]) { > */ > const time_t CLEAN_TIMEOUT = 600; /* 10 min */ > > + TRACE_ENTER(); > + > daemonize(argc, argv); > > if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0 ) { > diff --git a/src/log/logd/lgs_mbcsv.cc b/src/log/logd/lgs_mbcsv.cc > --- a/src/log/logd/lgs_mbcsv.cc > +++ b/src/log/logd/lgs_mbcsv.cc > @@ -2176,6 +2176,8 @@ uint32_t lgs_ckpt_send_async(lgs_cb_t *c > NCS_MBCSV_ARG mbcsv_arg; > lgsv_ckpt_msg_type_t ckpt_rec_type; > > + TRACE_ENTER(); > + > if (lgs_is_peer_v5()) { > lgsv_ckpt_msg_v5_t *ckpt_rec_v5 = static_cast<lgsv_ckpt_msg_v5_t > *>(ckpt_rec); > ckpt_rec_type = ckpt_rec_v5->header.ckpt_rec_type; > diff --git a/src/ntf/ntfd/NtfClient.cc b/src/ntf/ntfd/NtfClient.cc > --- a/src/ntf/ntfd/NtfClient.cc > +++ b/src/ntf/ntfd/NtfClient.cc > @@ -350,7 +350,7 @@ void NtfClient::readNextResponse(SaAisEr > } else { > read_next_res_lib(*error, NULL, mdsDest_, mdsCtxt); > } > - TRACE_ENTER(); > + TRACE_LEAVE(); > } > > void NtfClient::deleteReaderResponse(SaAisErrorT* error, > diff --git a/src/smf/smfd/SmfCampaignXmlParser.cc > b/src/smf/smfd/SmfCampaignXmlParser.cc > --- a/src/smf/smfd/SmfCampaignXmlParser.cc > +++ b/src/smf/smfd/SmfCampaignXmlParser.cc > @@ -2016,6 +2016,7 @@ SmfCampaignXmlParser::parseAppType( > { > xmlNsPtr ns = 0; > std::string dn; > + TRACE_ENTER(); > SmfImmCreateOperation* ico = prepareCreateOperation(parent, > "SaAmfAppType", i_node, "safVersion", dn); > if (ico == NULL) { > LOG_NO("SmfCampaignXmlParser::parseAppType: Fail to prepare > create IMM Create Operation"); > @@ -2083,6 +2084,7 @@ SmfCampaignXmlParser::parseSGType( > { > xmlNsPtr ns = 0; > std::string dn; > + TRACE_ENTER(); > SmfImmCreateOperation* ico = prepareCreateOperation(parent, > "SaAmfSGType", i_node, "safVersion", dn); > if (ico == NULL) { > LOG_NO("SmfCampaignXmlParser::parseSGType: Fail to prepare > create IMM Create Operation"); > @@ -2154,6 +2156,7 @@ SmfCampaignXmlParser::parseSUType( > { > xmlNsPtr ns = 0; > std::string dn; > + TRACE_ENTER(); > SmfImmCreateOperation* ico = prepareCreateOperation(parent, > "SaAmfSUType", i_node, "safVersion", dn); > if (ico == NULL) { > LOG_NO("SmfCampaignXmlParser::parseSUType: Fail to prepare > create IMM Create Operation"); > diff --git a/src/smf/smfd/SmfUpgradeStep.cc b/src/smf/smfd/SmfUpgradeStep.cc > --- a/src/smf/smfd/SmfUpgradeStep.cc > +++ b/src/smf/smfd/SmfUpgradeStep.cc > @@ -2574,6 +2574,9 @@ bool SmfUpgradeStep::checkAndInvokeCallb > SaAisErrorT rc = SA_AIS_OK; > > std::vector < SmfUpgradeStep * >::const_iterator iter; > + > + TRACE_ENTER(); > + > const std::vector <SmfUpgradeStep *>& procSteps = > m_procedure->getProcSteps(); > > cbkiter = callbackList.begin(); ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel