Hi Mahesh, I think we should increment the library version because we are introducing new APIs.
Thanks, Mathi. > -----Original Message----- > From: Venkata Mahesh Alla > Sent: Thursday, December 19, 2013 12:23 PM > To: opensaf-devel@lists.sourceforge.net; Sirisha Alla; > hans.fe...@ericsson.com; Mathivanan Naickan Palanivelu > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 1 of 1] cpsv: standardize arrival callback API(s) with SAF > syntax [#561] > > opensaf.spec.in | 1 + > osaf/libs/agents/saf/cpa/cpa_api.c | 547 > ++++++++++++++++++++++++++++++- > osaf/libs/agents/saf/cpa/cpa_proc.c | 6 +- > osaf/libs/common/cpsv/cpsv_edu.c | 22 +- > osaf/libs/common/cpsv/include/cpa_cb.h | 4 +- > osaf/libs/common/cpsv/include/cpa_def.h | 2 +- > osaf/libs/common/cpsv/include/cpa_proc.h | 2 +- > osaf/libs/common/cpsv/include/cpsv.h | 7 + > osaf/libs/common/cpsv/include/cpsv_evt.h | 8 +- > osaf/libs/saf/include/Makefile.am | 1 + > osaf/libs/saf/include/saCkpt_B_02_03.h | 152 ++++++++ > osaf/services/saf/cpsv/cpnd/cpnd_evt.c | 39 ++- > 12 files changed, 775 insertions(+), 16 deletions(-) > > > diff --git a/opensaf.spec.in b/opensaf.spec.in > --- a/opensaf.spec.in > +++ b/opensaf.spec.in > @@ -1399,6 +1399,7 @@ fi > %{_includedir}/saAis.h > %{_includedir}/saAmf.h > %{_includedir}/saCkpt.h > +%{_includedir}/saCkpt_B_02_03.h > %{_includedir}/saClm.h > %{_includedir}/saEvt.h > %{_includedir}/saImm.h > diff --git a/osaf/libs/agents/saf/cpa/cpa_api.c > b/osaf/libs/agents/saf/cpa/cpa_api.c > --- a/osaf/libs/agents/saf/cpa/cpa_api.c > +++ b/osaf/libs/agents/saf/cpa/cpa_api.c > @@ -119,8 +119,9 @@ SaAisErrorT saCkptInitialize(SaCkptHandl > > /* Store the callback functions, if set */ > if (ckptCallbacks) { > - cl_node->ckpt_callbk = *ckptCallbacks; > - > + cl_node->ckpt_callbk.saCkptCheckpointOpenCallback = > ckptCallbacks->saCkptCheckpointOpenCallback; > + cl_node->ckpt_callbk.saCkptCheckpointSynchronizeCallback > = ckptCallbacks->saCkptCheckpointSynchronizeCallback; > + cl_node->ckpt_callbk.saCkptCheckpointTrackCallback = > NULL; > } > > proc_rc = cpa_callback_ipc_init(cl_node); @@ -278,11 +279,269 @@ > SaAisErrorT saCkptInitialize(SaCkptHandl } > > > /********************************************************** > ****************** > - Name : saCkptSelectionObjectGet > + Name : SaCkptInitialize_2 > > - Description : This function returns the operating system handle > - associated with the ckptHandle. > + Description : This function initializes the Checkpoint Service for the > + invoking process and registers the various callback > functions. > + The handle 'ckptHandle' is returned as the reference to > this > + association between the process and the Checkpoint > Service. > + > > + Arguments : ckptHandle - A pointer to the handle designating this > + particular initialization of the Checkpoint > + service that it to be returned by the > Checkpoint > + Service. > + callbacks - Pointer to a SaCkptCallbacksT_2 structure, > + containing the callback functions of the > process > + that the Checkpoint Service may invoke. > + version - Is a pointer to the version of the Checkpoint > + Service that the invoking process is using. > + > + Return Values : Refer to SAI-AIS specification for various return values. > + > + Notes : > +********************************************************* > ************** > +*******/ SaAisErrorT saCkptInitialize_2(SaCkptHandleT *ckptHandle, > +const SaCkptCallbacksT_2 *ckptCallbacks, SaVersionT *version) { > + CPA_CB *cb = NULL; > + SaAisErrorT rc = SA_AIS_OK; > + CPSV_EVT init_evt; > + CPSV_EVT *out_evt = NULL; > + uint32_t proc_rc = NCSCC_RC_SUCCESS; > + CPA_CLIENT_NODE *cl_node = NULL; > + bool locked = true; > + SaVersionT client_version; > + > + TRACE_ENTER(); > + proc_rc = ncs_agents_startup(); > + if (NCSCC_RC_SUCCESS != proc_rc) { > + TRACE_4("cpa CkptInit:agents_startup Api failed with return > value:%d", proc_rc); > + return SA_AIS_ERR_LIBRARY; > + } > + > + proc_rc = ncs_cpa_startup(); > + if (NCSCC_RC_SUCCESS != proc_rc) { > + TRACE_4("cpa CkptInit:agents_startup Api failed with return > value:%d" , proc_rc); > + ncs_agents_shutdown(); > + return SA_AIS_ERR_LIBRARY; > + } > + > + if ((!ckptHandle) || (!version)) { > + rc = SA_AIS_ERR_INVALID_PARAM; > + TRACE_4("cpa CkptInit Api failed with return value :%d", rc); > + goto end; > + } > + > + *ckptHandle = 0; > + > + memcpy(&client_version, version, sizeof(SaVersionT)); > + > + if (m_CPA_VER_IS_BELOW_B_2_3(version)) { > + rc = SA_AIS_ERR_VERSION; > + TRACE_2("ERR_VERSION: Cpa version incompatible > saCkptInitialize_2 SHOULD BE A VERSION B.02.03 and above initialize but > claims to be" > + "%c %u %u", version->releaseCode, version- > >majorVersion, version->minorVersion); > + version->releaseCode = CPA_RELEASE_CODE; > + version->majorVersion = CPA_MAJOR_VERSION; > + version->minorVersion = CPA_MINOR_VERSION; > + goto end; > + } > + > + /* Draft Validations : Version */ > + rc = cpa_version_validate(version); > + if (rc != SA_AIS_OK) { > + TRACE_4("cpa CkptInit Api failed with return value:%d", rc); > + goto end; > + } > + > + /* retrieve CPA CB */ > + m_CPA_RETRIEVE_CB(cb); > + if (cb == NULL) { > + TRACE_4("cpa CkptInit:HDL_TAKE"); > + return SA_AIS_ERR_LIBRARY; > + } > + > + /* Take the CB Lock */ > + if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != > NCSCC_RC_SUCCESS) { > + TRACE_4("cpa CkptInit:LOCK"); > + rc = SA_AIS_ERR_LIBRARY; > + goto lock_fail; > + } > + > + /* Alloc the client info data structure & put it in the Pat tree */ > + cl_node = (CPA_CLIENT_NODE > *)m_MMGR_ALLOC_CPA_CLIENT_NODE; > + if (cl_node == NULL) { > + TRACE_4("cpa mem alloc CkptInit:CPA_CLIENT_NODE"); > + rc = SA_AIS_ERR_NO_MEMORY; > + goto cnode_alloc_fail; > + } > + memset(cl_node, 0, sizeof(CPA_CLIENT_NODE)); > + > + /* Store the callback functions, if set */ > + if (ckptCallbacks) { > + cl_node->ckpt_callbk = *ckptCallbacks; > + } > + > + proc_rc = cpa_callback_ipc_init(cl_node); > + if (proc_rc != NCSCC_RC_SUCCESS) { > + /* Error handling */ > + rc = SA_AIS_ERR_LIBRARY; > + /* ALready looged by cpa_callback_ipc_init */ > + goto ipc_init_fail; > + } > + > + /* populate the EVT structure */ > + memset(&init_evt, 0, sizeof(CPSV_EVT)); > + init_evt.type = CPSV_EVT_TYPE_CPND; > + init_evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_INIT; > + init_evt.info.cpnd.info.initReq.version = client_version; > + > + /* Release the CB lock Before MDS Send */ > + if (locked) > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > + locked = false; > + > + /* CPND GOES DOWN */ > + if (false == cb->is_cpnd_up) { > + rc = SA_AIS_ERR_TRY_AGAIN; > + TRACE_4("cpa: api failed in CkptInit:CPND_DOWN"); > + goto mds_fail; > + } > + > + /* send the request to the CPND */ > + proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, &cb- > >cpnd_mds_dest, > +&init_evt, &out_evt, CPSV_WAIT_TIME); > + > + /* Error Handling */ > + switch (proc_rc) { > + case NCSCC_RC_SUCCESS: > + break; > + case NCSCC_RC_REQ_TIMOUT: > + TRACE_4("cpa CkptInit:MDS Api failed with return > value:%d,cpnd_mds_dest:%"PRIu64, proc_rc, cb->cpa_mds_dest); > + rc = SA_AIS_ERR_TIMEOUT; > + goto mds_fail; > + default: > + TRACE_4("cpa CkptInit:MDS Api failed with return > value:%d,cpnd_mds_dest:%"PRIu64, proc_rc, cb->cpa_mds_dest); > + rc = SA_AIS_ERR_TRY_AGAIN; > + goto mds_fail; > + } > + > + if (out_evt) { > + rc = out_evt->info.cpa.info.initRsp.error; > + if (rc != SA_AIS_OK) { > + TRACE_4("cpa CkptInit:CPND_ERR Api failed with > return value:%d",rc); > + goto rsp_not_ok; > + } > + > + if (m_CPA_VER_IS_ABOVE_B_1_1(version)) { > + if (rc == SA_AIS_ERR_UNAVAILABLE) { > + cb->is_cpnd_joined_clm = false; > + if (locked) > + m_NCS_UNLOCK(&cb->cb_lock, > NCS_LOCK_WRITE); > + locked = false; > + goto clm_left; > + } else { > + cb->is_cpnd_joined_clm = true; > + } > + } > + /* Take the CB lock after MDS Send */ > + if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != > NCSCC_RC_SUCCESS) { > + TRACE_4("cpa CkptInit:LOCK"); > + rc = SA_AIS_ERR_LIBRARY; > + goto lock_fail1; > + } else > + locked = true; > + > + cl_node->cl_hdl = out_evt->info.cpa.info.initRsp.ckptHandle; > + cl_node->stale = false; > + proc_rc = cpa_client_node_add(&cb->client_tree, cl_node); > + if (proc_rc != NCSCC_RC_SUCCESS) { > + rc = SA_AIS_ERR_LIBRARY; > + TRACE_4("cpa api processing failed in > CkptInit:client_node_add Api failed with return value:%d,cl_hdl:%llx ", rc, > cl_node->cl_hdl); > + goto node_add_fail; > + } > + } else { > + TRACE_4("cpa api processing failed in CkptInit Api failed with > return value:%d", rc); > + rc = SA_AIS_ERR_NO_RESOURCES; > + } > + > + if (rc != SA_AIS_OK) { > + TRACE_4("cpa CkptInit:CPND_ERR Api failed with return > value:%d",rc); > + goto cpnd_rsp_fail; > + } > + > + /*Error handling */ > +cpnd_rsp_fail: > +node_add_fail: > +lock_fail1: > + if (rc != SA_AIS_OK) { > + CPSV_EVT finalize_evt, *out_evt1; > + > + out_evt1 = NULL; > + /* populate the structure */ > + memset(&finalize_evt, 0, sizeof(CPSV_EVT)); > + finalize_evt.type = CPSV_EVT_TYPE_CPND; > + finalize_evt.info.cpnd.type = > CPND_EVT_A2ND_CKPT_FINALIZE; > + finalize_evt.info.cpnd.info.finReq.client_hdl = cl_node- > >cl_hdl; > + > + if (locked) > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > + locked = false; > + > + /* send the request to the CPND */ > + proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, > &(cb->cpnd_mds_dest), > + &finalize_evt, &out_evt1, > CPSV_WAIT_TIME); > + if (out_evt1) > + m_MMGR_FREE_CPSV_EVT(out_evt1, > NCS_SERVICE_ID_CPA); > + } > + > +rsp_not_ok: > +mds_fail: > + > + /* Free the IPC initialized for this client */ > + if (rc != SA_AIS_OK) > + cpa_callback_ipc_destroy(cl_node); > + > +ipc_init_fail: > + /* Free the Client NODE */ > + if (rc != SA_AIS_OK) > + m_MMGR_FREE_CPA_CLIENT_NODE(cl_node); > + > +cnode_alloc_fail: > + /* Release the CB lock */ > + if (locked) > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > + > +lock_fail: > +clm_left: > + /* Release the CB handle */ > + m_CPA_GIVEUP_CB; > + > + /* Free the Out Event */ > + if (out_evt) > + m_MMGR_FREE_CPSV_EVT(out_evt, > NCS_SERVICE_ID_CPA); > + > + if (rc == SA_AIS_OK) { > + memcpy(&(cl_node->version), &client_version, > sizeof(SaVersionT)); > + /* Went well, return ckptHandle to the application */ > + *ckptHandle = cl_node->cl_hdl; > + TRACE_1("cpa ckptInit Api success with return value:%d and > cl_hdl:%llx", SA_AIS_OK, cl_node->cl_hdl); > + } > +end: > + if (rc != SA_AIS_OK) { > + ncs_cpa_shutdown(); > + ncs_agents_shutdown(); > + } > + > + TRACE_LEAVE2("API Return code = %u", rc); > + return rc; > +} > + > + > +/********************************************************* > ******************* > +Name : saCkptSelectionObjectGet > + > +Description : This function returns the operating system handle > +associated with the ckptHandle. > + > Arguments : ckptHandle - Checkpoint service handle. > selectionObject - Pointer to the operating system handle. > > @@ -4166,7 +4425,7 @@ ncsCkptRegisterCkptArrivalCallback(SaCkp > } > > if (ckptArrivalCallback) { > - cl_node->ckptArrivalCallback = ckptArrivalCallback; > + cl_node->ckpt_callbk.saCkptCheckpointTrackCallback = > +ckptArrivalCallback; > if (cl_node->callbk_mbx == 0) > proc_rc = cpa_callback_ipc_init(cl_node); > else > @@ -4226,3 +4485,279 @@ ncsCkptRegisterCkptArrivalCallback(SaCkp > TRACE_LEAVE2("API return code = %u", rc); > return rc; > } > + > +/********************************************************* > ******************* > +Name : saCkptTrack > + > +Description : This function enable the Ckpt Track call back > + > +Arguments : ckptHandle - Checkpoint handle. > + > +Return Values : Refer to SAI-AIS specification for various return values. > + > +Notes : > + > +********************************************************* > ************** > +*******/ SaAisErrorT saCkptTrack(SaCkptHandleT ckptHandle) { > + SaAisErrorT rc = SA_AIS_OK; > + CPSV_EVT evt; > + uint32_t proc_rc = NCSCC_RC_SUCCESS; > + CPA_CLIENT_NODE *cl_node = NULL; > + CPA_CB *cb = NULL; > + bool is_locked = false; > + > + /* retrieve CPA CB */ > + m_CPA_RETRIEVE_CB(cb); > + if (!cb) { > + rc = SA_AIS_ERR_BAD_HANDLE; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx",rc, ckptHandle); > + goto done; > + } > + > + /* get the CB Lock */ > + if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != > NCSCC_RC_SUCCESS) { > + rc = SA_AIS_ERR_LIBRARY; > + TRACE_4("cpa CkptArrivalCallback:LOCK Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto lock_fail; > + } > + > + is_locked = true; > + > + /* Get the Client info */ > + rc = cpa_client_node_get(&cb->client_tree, &ckptHandle, > &cl_node); > + > + if (!cl_node) { > + rc = SA_AIS_ERR_BAD_HANDLE; > + TRACE_4("cpa CkptArrivalCallback:client_node_get Api failed > with return value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto proc_fail; > + } > + > + if (m_CPA_VER_IS_BELOW_B_2_3(&cl_node->version)) { > + rc = SA_AIS_ERR_VERSION; > + TRACE_2("ERR_VERSION: saCkptTrack SHOULD BE A VERSION > B.02.03 and above API but claims to be" > + "%c %u %u", cl_node->version.releaseCode, > cl_node->version.majorVersion, cl_node->version.minorVersion); > + goto proc_fail; > + } > + > + if (cl_node->ckpt_callbk.saCkptCheckpointTrackCallback) { > + if (cl_node->callbk_mbx == 0) > + proc_rc = cpa_callback_ipc_init(cl_node); > + else > + proc_rc = NCSCC_RC_SUCCESS; > + } else { > + rc = SA_AIS_ERR_INIT; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto proc_fail; > + > + } > + > + if (proc_rc != NCSCC_RC_SUCCESS) { > + /* Error handling */ > + rc = SA_AIS_ERR_LIBRARY; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto proc_fail; > + } > + /* Send it to CPND */ > + memset(&evt, 0, sizeof(CPSV_EVT)); > + evt.type = CPSV_EVT_TYPE_CPND; > + evt.info.cpnd.type = CPND_EVT_A2ND_ARRIVAL_CB_REG; > + evt.info.cpnd.info.arr_ntfy.client_hdl = ckptHandle; > + > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > + is_locked = false; > + /* IF CPND IS DOWN */ > + if (false == cb->is_cpnd_up) { > + rc = SA_AIS_ERR_TRY_AGAIN; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto lock_fail; > + } > + proc_rc = cpa_mds_msg_send(cb->cpa_mds_hdl, &cb- > >cpnd_mds_dest, &evt, NCSMDS_SVC_ID_CPND); > + /* Generate rc from proc_rc */ > + switch (proc_rc) { > + case NCSCC_RC_SUCCESS: > + cl_node->is_track_enabled = true; > + break; > + case NCSCC_RC_REQ_TIMOUT: > + rc = SA_AIS_ERR_TIMEOUT; > + TRACE_4("cpa CkptArrivalCallback:MDS Api failed > with return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, > ckptHandle, cb->cpnd_mds_dest); > + goto proc_fail; > + default: > + rc = SA_AIS_ERR_NO_RESOURCES; > + TRACE_4("cpa CkptArrivalCallback:MDS Api failed > with return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, > ckptHandle, cb->cpnd_mds_dest); > + goto proc_fail; > + } > + > +proc_fail: > + if (is_locked) > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > +lock_fail: > + m_CPA_GIVEUP_CB; > + > +done: > + TRACE_LEAVE2("API return code = %u", rc); > + return rc; > +} > + > +/********************************************************* > ******************* > +Name : saCkptTrackStop > + > +Description : This function disable the Ckpt Track call back > + > +Arguments : ckptHandle - Checkpoint handle. > + > +Return Values : Refer to SAI-AIS specification for various return values. > + > +Notes : > + > +********************************************************* > ************** > +*******/ SaAisErrorT saCkptTrackStop(SaCkptHandleT ckptHandle) { > + SaAisErrorT rc = SA_AIS_OK; > + CPSV_EVT evt; > + uint32_t proc_rc = NCSCC_RC_SUCCESS; > + CPA_CLIENT_NODE *cl_node = NULL; > + CPA_CB *cb = NULL; > + bool is_locked = false; > + > + /* retrieve CPA CB */ > + m_CPA_RETRIEVE_CB(cb); > + if (!cb) { > + rc = SA_AIS_ERR_BAD_HANDLE; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx",rc, ckptHandle); > + goto done; > + } > + > + /* get the CB Lock */ > + if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != > NCSCC_RC_SUCCESS) { > + rc = SA_AIS_ERR_LIBRARY; > + TRACE_4("cpa CkptArrivalCallback:LOCK Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto lock_fail; > + } > + > + is_locked = true; > + > + /* Get the Client info */ > + rc = cpa_client_node_get(&cb->client_tree, &ckptHandle, > &cl_node); > + > + if (!cl_node) { > + rc = SA_AIS_ERR_BAD_HANDLE; > + TRACE_4("cpa CkptArrivalCallback:client_node_get Api failed > with return value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto proc_fail; > + } > + > + if (m_CPA_VER_IS_BELOW_B_2_3(&cl_node->version)) { > + rc = SA_AIS_ERR_VERSION; > + TRACE_2("ERR_VERSION: saCkptTrackStop SHOULD BE A > VERSION B.02.03 and above API but claims to be" > + "%c %u %u", cl_node->version.releaseCode, > cl_node->version.majorVersion, cl_node->version.minorVersion); > + goto proc_fail; > + } > + > + if (cl_node->ckpt_callbk.saCkptCheckpointTrackCallback) { > + if ((cl_node->callbk_mbx == 0) || (cl_node- > >is_track_enabled != true)) > + proc_rc = SA_AIS_ERR_NOT_EXIST; > + else > + proc_rc = NCSCC_RC_SUCCESS; > + } else { > + rc = SA_AIS_ERR_INIT; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto proc_fail; > + > + } > + > + if (proc_rc != NCSCC_RC_SUCCESS) { > + /* Error handling */ > + rc = SA_AIS_ERR_NOT_EXIST; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto proc_fail; > + } > + > + /* Send it to CPND */ > + memset(&evt, 0, sizeof(CPSV_EVT)); > + evt.type = CPSV_EVT_TYPE_CPND; > + evt.info.cpnd.type = CPND_EVT_A2ND_ARRIVAL_CB_UNREG; > + evt.info.cpnd.info.arr_ntfy.client_hdl = ckptHandle; > + > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > + is_locked = false; > + > + /* IF CPND IS DOWN */ > + if (false == cb->is_cpnd_up) { > + rc = SA_AIS_ERR_TRY_AGAIN; > + TRACE_4("cpa CkptArrivalCallback Api failed with return > value:%d,ckptHandle:%llx", rc, ckptHandle); > + goto lock_fail; > + } > + proc_rc = cpa_mds_msg_send(cb->cpa_mds_hdl, &cb- > >cpnd_mds_dest, &evt, > +NCSMDS_SVC_ID_CPND); > + > + /* Generate rc from proc_rc */ > + switch (proc_rc) { > + case NCSCC_RC_SUCCESS: > + cl_node->is_track_enabled = false; > + break; > + case NCSCC_RC_REQ_TIMOUT: > + rc = SA_AIS_ERR_TIMEOUT; > + TRACE_4("cpa CkptArrivalCallback:MDS Api failed > with return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, > ckptHandle, cb->cpnd_mds_dest); > + goto proc_fail; > + default: > + rc = SA_AIS_ERR_NO_RESOURCES; > + TRACE_4("cpa CkptArrivalCallback:MDS Api failed > with return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, > ckptHandle, cb->cpnd_mds_dest); > + goto proc_fail; > + } > + > +proc_fail: > + if (is_locked) > + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); > +lock_fail: > + m_CPA_GIVEUP_CB; > + > +done: > + TRACE_LEAVE2("API return code = %u", rc); > + return rc; > +} > + > +/********************************************************* > ******************* > +Name : saCkptCheckpointTrack > + > +Description : This function enables the specific Checkpoint Track call > back > + > +Arguments : checkpointHandle - The handle that designates the > checkpoint > +to enables Track. > + > +Return Values : Refer to SAI-AIS specification for various return values. > + > +Notes : > + > +********************************************************* > ************** > +*******/ SaAisErrorT saCkptCheckpointTrack(SaCkptCheckpointHandleT > +checkpointHandle) { > + /* TODO: Not supported yet. > + In future to support checkpoint tracking start "per (checkpoint - > handle) SaCkptCheckpointHandleT ". > + this is a placeholder for future enhancement the > saCkptCheckpointTrack() is in place, but > + will return SA_AIS_ERR_NOT_SUPPORTED */ > + SaAisErrorT rc = SA_AIS_ERR_NOT_SUPPORTED; > + TRACE_ENTER(); > + TRACE_LEAVE2("API return code = %u", rc); > + return rc; > +} > + > +/********************************************************* > ******************* > +Name : saCkptCheckpointTrackStop > + > +Description : This function disables the specific Checkpoint Track call > back > + > +Arguments : checkpointHandle - The handle that designates the > checkpoint > +to disables Track. > + > +Return Values : Refer to SAI-AIS specification for various return values. > + > +Notes : > + > +********************************************************* > ************** > +*******/ SaAisErrorT > saCkptCheckpointTrackStop(SaCkptCheckpointHandleT > +checkpointHandle) { > + /* TODO: Not supported yet. > + In future to support checkpoint tracking stop "per (checkpoint - > handle) SaCkptCheckpointHandleT ". > + this is a placeholder for future enhancement the > saCkptCheckpointTrack() is in place, but > + will return SA_AIS_ERR_NOT_SUPPORTED */ > + SaAisErrorT rc = SA_AIS_ERR_NOT_SUPPORTED; > + TRACE_ENTER(); > + TRACE_LEAVE2("API return code = %u", rc); > + return rc; > +} > + > diff --git a/osaf/libs/agents/saf/cpa/cpa_proc.c > b/osaf/libs/agents/saf/cpa/cpa_proc.c > --- a/osaf/libs/agents/saf/cpa/cpa_proc.c > +++ b/osaf/libs/agents/saf/cpa/cpa_proc.c > @@ -1031,10 +1031,10 @@ static void cpa_process_callback_info(CP > } > break; > case CPA_CALLBACK_TYPE_ARRIVAL_NTFY: > - if (cl_node->ckptArrivalCallback) { > + if (cl_node->ckpt_callbk.saCkptCheckpointTrackCallback) { > uint32_t i = 0; > - cl_node->ckptArrivalCallback(callback->lcl_ckpt_hdl, > callback->ioVector, > - callback->num_of_elmts); > + cl_node- > >ckpt_callbk.saCkptCheckpointTrackCallback(callback->lcl_ckpt_hdl, callback- > >ioVector, > + callback->num_of_elmts); > for (i = 0; i < callback->num_of_elmts; i++) { > if (callback->ioVector[i].sectionId.id != NULL > && callback->ioVector[i].sectionId.idLen != > 0) diff --git a/osaf/libs/common/cpsv/cpsv_edu.c > b/osaf/libs/common/cpsv/cpsv_edu.c > --- a/osaf/libs/common/cpsv/cpsv_edu.c > +++ b/osaf/libs/common/cpsv/cpsv_edu.c > @@ -87,7 +87,7 @@ FUNC_DECLARATION(CPD_EVT); > FUNC_DECLARATION(CPA_EVT); FUNC_DECLARATION(CPSV_EVT); > FUNC_DECLARATION(CPSV_A2ND_CKPT_LIST_UPDATE); > - > +FUNC_DECLARATION(CPSV_A2ND_ARRIVAL_UNREG); > /* Test function declaration */ > TEST_FUNC_DECLARATION(CPSV_EVT); > TEST_FUNC_DECLARATION(CPA_EVT); > @@ -1086,6 +1086,21 @@ FUNC_DECLARATION(DS) > > #undef DS > > +#define DS CPSV_A2ND_ARRIVAL_UNREG > +FUNC_DECLARATION(DS) > +{ > + NCS_ENC_DEC_DECLARATION(DS); > + NCS_ENC_DEC_ARRAY(DS) { > + > + { > + EDU_START, > FUNC_NAME(CPSV_A2ND_ARRIVAL_UNREG), 0, 0, 0, sizeof(DS), 0, NULL}, { > + EDU_EXEC, ncs_edp_uns64, 0, 0, 0, > (long)&((DS *) 0)->client_hdl, 0, NULL}, { > + EDU_END, 0, 0, 0, 0, 0, 0, NULL},}; > + NCS_ENC_DEC_REM_FLOW(DS) > +} > + > +#undef DS > + > /* CPD --> CPND */ > #define DS CPSV_CPND_DEST_INFO > FUNC_DECLARATION(DS) > @@ -1234,6 +1249,7 @@ FUNC_DECLARATION(DS) > > #undef DS > > + > #define DS CPND_EVT > TEST_FUNC_DECLARATION(DS) > { > @@ -1301,6 +1317,7 @@ TEST_FUNC_DECLARATION(DS) > > > LCL_TEST_JUMP_OFFSET_CPND_EVT_D2ND_CKPT_NUM_SECTIONS, > > LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_CKPT_LIST_UPDATE, > + > LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_ARRIVAL_CB_UNREG, > > }; > > @@ -1416,6 +1433,8 @@ TEST_FUNC_DECLARATION(DS) > return > LCL_TEST_JUMP_OFFSET_CPSV_D2ND_RESTART_DONE; > case CPND_EVT_A2ND_CKPT_LIST_UPDATE: > return > LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_CKPT_LIST_UPDATE; > + case CPND_EVT_A2ND_ARRIVAL_CB_UNREG: > + return > LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_ARRIVAL_CB_UNREG; > default: > return EDU_FAIL; > } > @@ -1520,6 +1539,7 @@ FUNC_DECLARATION(DS) > EDU_EXEC, FUNC_NAME(CPSV_CKPT_NUM_SECTIONS), 0, > 0, EDU_EXIT, > (long)&((DS *) 0)->info.ckpt_sections, 0, NULL}, { > EDU_EXEC, FUNC_NAME(CPSV_A2ND_CKPT_LIST_UPDATE), > 0, 0, EDU_EXIT, (long)&((DS *) 0)->info.ckptListUpdate, 0, NULL},{ > + EDU_EXEC, > FUNC_NAME(CPSV_A2ND_ARRIVAL_UNREG), 0, 0, EDU_EXIT, > +(long)&((DS *) 0)->info.arr_ntfy, 0, NULL},{ > EDU_END, 0, 0, 0, 0, 0, 0, NULL},}; > NCS_ENC_DEC_REM_FLOW(DS) > } > diff --git a/osaf/libs/common/cpsv/include/cpa_cb.h > b/osaf/libs/common/cpsv/include/cpa_cb.h > --- a/osaf/libs/common/cpsv/include/cpa_cb.h > +++ b/osaf/libs/common/cpsv/include/cpa_cb.h > @@ -28,9 +28,9 @@ typedef struct cpa_client_node { > SaCkptHandleT cl_hdl; /* index for the tree */ > uint8_t stale; /*Loss of connection with cpnd because of > clm node left > will set this to true for the connection. */ > - SaCkptCallbacksT ckpt_callbk; > + SaCkptCallbacksT_2 ckpt_callbk; > SYSF_MBX callbk_mbx; /* Mailbox Queue for client messages */ > - ncsCkptCkptArrivalCallbackT ckptArrivalCallback; /* NCS > callback extention */ > + bool is_track_enabled; > SaVersionT version; > } CPA_CLIENT_NODE; > > diff --git a/osaf/libs/common/cpsv/include/cpa_def.h > b/osaf/libs/common/cpsv/include/cpa_def.h > --- a/osaf/libs/common/cpsv/include/cpa_def.h > +++ b/osaf/libs/common/cpsv/include/cpa_def.h > @@ -21,7 +21,7 @@ > /* Macros for Validating Version */ > #define CPA_RELEASE_CODE 'B' > #define CPA_MAJOR_VERSION 0x02 > -#define CPA_MINOR_VERSION 0x02 > +#define CPA_MINOR_VERSION 0x03 > #define CPA_BASE_MAJOR_VERSION 0x01 > #define CPA_BASE_MINOR_VERSION 0x01 > > diff --git a/osaf/libs/common/cpsv/include/cpa_proc.h > b/osaf/libs/common/cpsv/include/cpa_proc.h > --- a/osaf/libs/common/cpsv/include/cpa_proc.h > +++ b/osaf/libs/common/cpsv/include/cpa_proc.h > @@ -23,7 +23,7 @@ typedef enum cpa_callback_type { > CPA_CALLBACK_TYPE_OPEN = 1, > CPA_CALLBACK_TYPE_SYNC, > CPA_CALLBACK_TYPE_ARRIVAL_NTFY, > - CPA_CALLBACK_TYPE_MAX = CPA_CALLBACK_TYPE_SYNC > + CPA_CALLBACK_TYPE_MAX = CPA_CALLBACK_TYPE_ARRIVAL_NTFY > } CPA_CALLBACK_TYPE; > > /* Info required for Call back */ > diff --git a/osaf/libs/common/cpsv/include/cpsv.h > b/osaf/libs/common/cpsv/include/cpsv.h > --- a/osaf/libs/common/cpsv/include/cpsv.h > +++ b/osaf/libs/common/cpsv/include/cpsv.h > @@ -74,6 +74,13 @@ > ((ver)->releaseCode > 'B') )&& \ > ((ver)->majorVersion > 0x01 ) && \ > ((ver)->minorVersion > 0x01 ) ) > + > +#define m_CPA_VER_IS_BELOW_B_2_3(ver) \ > + (((ver)->releaseCode != 'B') || \ > + ((ver)->majorVersion != 0x02 ) || \ > + ((ver)->minorVersion < 0x03 ) ) > + > + > #define m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(attr) \ > ((attr)->creationFlags & SA_CKPT_CHECKPOINT_COLLOCATED) > > diff --git a/osaf/libs/common/cpsv/include/cpsv_evt.h > b/osaf/libs/common/cpsv/include/cpsv_evt.h > --- a/osaf/libs/common/cpsv/include/cpsv_evt.h > +++ b/osaf/libs/common/cpsv/include/cpsv_evt.h > @@ -30,6 +30,7 @@ > #define CPSV_EVT_H > > #include <saCkpt.h> > +#include <saCkpt_B_02_03.h> > #include "ncssysf_tmr.h" > > > /********************************************************** > ******************* > @@ -115,7 +116,7 @@ typedef enum cpnd_evt_type { > > CPND_EVT_A2ND_CKPT_ITER_GETNEXT, /* Checkpoint Section > Iternation Getnext Call */ > > - CPND_EVT_A2ND_ARRIVAL_CB_REG, /* Checkpoint Arrival Callback > */ > + CPND_EVT_A2ND_ARRIVAL_CB_REG, /* Checkpoint Arrival Callback > Register*/ > > CPND_EVT_A2ND_CKPT_WRITE, /* Checkpoint Write And > overwrite call */ > CPND_EVT_A2ND_CKPT_READ, /* Checkpoint Read Call */ > @@ -177,6 +178,7 @@ typedef enum cpnd_evt_type { > CPND_EVT_D2ND_CKPT_NUM_SECTIONS, > CPND_EVT_A2ND_CKPT_REFCNTSET, /* ref cont opener's set call */ > CPND_EVT_A2ND_CKPT_LIST_UPDATE, /* Checkpoint ckpt list update > Call */ > + CPND_EVT_A2ND_ARRIVAL_CB_UNREG, /* Checkpoint Arrival Callback > Un-Register*/ > CPND_EVT_MAX > > }CPND_EVT_TYPE; > @@ -394,6 +396,10 @@ typedef struct cpsv_a2nd_arrival_reg { > SaCkptCheckpointHandleT client_hdl; > } CPSV_A2ND_ARRIVAL_REG; > > +typedef struct cpsv_a2nd_arrival_unreg { > + SaCkptCheckpointHandleT client_hdl; > +} CPSV_A2ND_ARRIVAL_UNREG; > + > typedef struct cpsv_a2nd_sync_ckpt { > SaCkptCheckpointHandleT ckpt_id; > SaCkptCheckpointHandleT lcl_ckpt_hdl; > diff --git a/osaf/libs/saf/include/Makefile.am > b/osaf/libs/saf/include/Makefile.am > --- a/osaf/libs/saf/include/Makefile.am > +++ b/osaf/libs/saf/include/Makefile.am > @@ -22,6 +22,7 @@ include_HEADERS = \ > saAis.h \ > saAmf.h \ > saCkpt.h \ > + saCkpt_B_02_03.h \ > saClm.h \ > saEvt.h \ > saImm.h \ > diff --git a/osaf/libs/saf/include/saCkpt_B_02_03.h > b/osaf/libs/saf/include/saCkpt_B_02_03.h > new file mode 100644 > --- /dev/null > +++ b/osaf/libs/saf/include/saCkpt_B_02_03.h > @@ -0,0 +1,152 @@ > +/* -*- OpenSAF -*- > + * > + * (C) Copyright 2008 The OpenSAF Foundation > + * > + * This program is distributed in the hope that it will be useful, but > + * WITHOUT ANY WARRANTY; without even the implied warranty of > +MERCHANTABILITY > + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are > +licensed > + * under the GNU Lesser General Public License Version 2.1, February 1999. > + * The complete license can be accessed from the following location: > + * http://opensource.org/licenses/lgpl-license.php > + * See the Copying file included with the OpenSAF distribution for full > + * licensing terms. > + * > + * Author(s): Goahead > + */ > + > +/* > + * DESCRIPTION: > + * This file provides the suggested additions to the C language binding for > + * the Service Availability(TM) Forum Information Model Management > Service (CKPT). > + * It contains only the prototypes and type definitions that are part of > this > + * proposed addition. > + * These additions are currently NON STANDARD. But the intention is to > get these > + * additions approved formally by SAF in the future. > + * > + */ > + > +#ifndef _SA_CKPT_B_02_03_H > +#define _SA_CKPT_B_02_03_H > + > +#include "saAis.h" > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > + > /**************************************************** > *********************** > + @brief : The Checkpoint Service invokes this callback function when > the > + ckpt write, ckpt section create and ckpt section > delete happens > + for the ALL the Checkpoints which are opened with > CHECKPOINT_WRITE > + Open Flags by the ckptHandle invoking process . > + @param[in] : checkpointHandle - A pointer to the checkpoint handle > which was > + obtained by saCkptCheckpointOpen. > + @param[out] : ioVector - A pointer to an array that contains > elements ioVector[0], > + @param[out] : numberOfElements - Size of the ioVector. > + > **************************************************** > ************************/ > + typedef void > + (*SaCkptCheckpointTrackCallbackT) > (SaCkptCheckpointHandleT checkpointHandle, > + SaCkptIOVectorElementT *ioVector, > + SaUint32T numberOfElements); > + > + > /**************************************************** > *********************** > + @brief : The callbacks structure is supplied to the Checkpoint > Service by a > + process and contains the callback functions that the > + Checkpoint Service can invoke. > + > **************************************************** > *************************/ > + typedef struct { > + SaCkptCheckpointOpenCallbackT > saCkptCheckpointOpenCallback; > + SaCkptCheckpointSynchronizeCallbackT > saCkptCheckpointSynchronizeCallback; > + SaCkptCheckpointTrackCallbackT > saCkptCheckpointTrackCallback; > + } SaCkptCallbacksT_2; > + > + > /**************************************************** > *********************** > + @brief : saCkptInitialize_2 function initializes the Checkpoint > Service > + for the invoking process and registers the various > callback functions. > + The handle 'ckptHandle' is returned as the reference > to this > + association between the process and the Checkpoint > Service.. > + @param[out] : ckptHandle - A pointer to the handle designating this > + particular initialization of the Checkpoint > + service that it to be returned by the Checkpoint > Service. > + @param[in] : ckptCallbacks-Pointer to a SaCkptCallbacksT_2 > structure, > + containing the callback functions of the process > + that the Checkpoint Service may invoke. > + @param[in] : version - Is a pointer to the version of the Checkpoint > + Service that the invoking process is using. > + @return : SA_AIS_OK if successful otherwise appropriate err > code, > + Refer to SAI-AIS specification for various return > values. > + > **************************************************** > *************************/ > + extern SaAisErrorT > + saCkptInitialize_2(SaCkptHandleT *ckptHandle, const > +SaCkptCallbacksT_2 *callbacks, SaVersionT *version); > + > + > /**************************************************** > *********************** > + @brief : saCkptTrack function enable/starts the Ckpt Track callback > + function (saCkptCheckpointTrackCallback) which was > registered > + at the time of initializes for the ckptHandle invoking > process. > + The registered Track Callback function will be invoked > whenever > + ckpt write, ckpt section create and ckpt section > delete happens > + for the ALL the Checkpoints which are opened with > CHECKPOINT_WRITE > + Open Flags by the ckptHandle invoking process . > + @param[in] : ckptHandle - A pointer to the handle designating this > + particular initialization of the Checkpoint > + service which was returned at the time of initialize(). > + @return : SA_AIS_OK if successful otherwise appropriate err > code, > + Refer to SAI-AIS specification for various return > values. > + > **************************************************** > *************************/ > + extern SaAisErrorT > + saCkptTrack(SaCkptHandleT ckptHandle); > + > + > /**************************************************** > *********************** > + @brief : saCkptTrackStop function disables/stops the Ckpt Track > callback > + function (saCkptCheckpointTrackCallback) which was > registered at > + the time of initializes for the ckptHandle invoking > process. > + The registered Track Callback function will be disabled > for > + ckpt write, ckpt section create and ckpt section > delete happens > + for the ALL the Checkpoints which are opened with > CHECKPOINT_WRITE > + Open Flags by the ckptHandle invoking process . > + @param[in] : ckptHandle - A pointer to the handle designating this > + particular initialization of the Checkpoint > + service which was returned at the time of initialize(). > + @return : SA_AIS_OK if successful otherwise appropriate err > code , > + Refer to SAI-AIS specification for various return > values. > + > **************************************************** > *************************/ > + extern SaAisErrorT > + saCkptTrackStop(SaCkptHandleT ckptHandle); > + > + > /**************************************************** > *********************** > + @brief : saCkptCheckpointTrack function enable/starts the Ckpt > Track > + callback function (saCkptCheckpointTrackCallback) > which was > + registered at the time of initializes for a particular > checkpointHandle. > + The registered Track Callback function will be invoked > + whenever ckpt write, ckpt section create and ckpt > section > + delete happens for the Checkpoints which are > opened with > + CHECKPOINT_WRITE Open Flags by a particular > checkpointHandle. > + @param[in] : checkpointHandle -A pointer to the checkpoint handle > + which was obtained by saCkptCheckpointOpen > + @return : SA_AIS_OK if successful otherwise appropriate err > code, > + Refer to SAI-AIS specification for various return > values. > + > **************************************************** > *************************/ > + extern SaAisErrorT > + saCkptCheckpointTrack(SaCkptCheckpointHandleT > checkpointHandle); > + > + > /**************************************************** > *********************** > + @brief : saCkptCheckpointTrack function disables/stops the Ckpt > Track > + callback function (saCkptCheckpointTrackCallback) > which was > + registered at the time of initializes for a particular > checkpointHandle. > + The registered Track Callback function will be disabled > for > + ckpt write, ckpt section create and ckpt section > delete happens > + for the Checkpoints which are opened with > CHECKPOINT_WRITE > + Open Flags by a particular checkpointHandle . > + @param[in] : checkpointHandle -A pointer to the checkpoint handle > which > + was obtained by saCkptCheckpointOpen > + @return : SA_AIS_OK if successful otherwise appropriate err > code, > + Refer to SAI-AIS specification for various return > values. > + > **************************************************** > *************************/ > + extern SaAisErrorT > + saCkptCheckpointTrackStop(SaCkptCheckpointHandleT > checkpointHandle); > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* _SA_CKPT_B_02_03_H */ > diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > --- a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > +++ b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > @@ -59,6 +59,7 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt static > uint32_t cpnd_evt_proc_nd2nd_ckpt_active_data_access_rsp(CPND_CB > *cb, CPND_EVT *evt, CPSV_SEND_INFO *sinfo); static uint32_t > cpnd_evt_proc_ckpt_sync(CPND_CB *cb, CPND_EVT *evt, > CPSV_SEND_INFO *sinfo); static uint32_t > cpnd_evt_proc_arrival_cbreg(CPND_CB *cb, CPND_EVT *evt, > CPSV_SEND_INFO *sinfo); > +static uint32_t cpnd_evt_proc_arrival_cbunreg(CPND_CB *cb, CPND_EVT > +*evt, CPSV_SEND_INFO *sinfo); > static uint32_t cpnd_evt_proc_nd2nd_ckpt_sync_req(CPND_CB *cb, > CPND_EVT *evt, CPSV_SEND_INFO *sinfo); static uint32_t > cpnd_evt_proc_nd2nd_ckpt_active_sync(CPND_CB *cb, CPND_EVT *evt, > CPSV_SEND_INFO *sinfo); static uint32_t > cpnd_evt_proc_ckpt_read(CPND_CB *cb, CPND_EVT *evt, > CPSV_SEND_INFO *sinfo); @@ -105,7 +106,7 @@ static char *cpnd_evt_str[] > = { > "CPND_EVT_A2ND_CKPT_READ", /* Checkpoint Read Call */ > "CPND_EVT_A2ND_CKPT_SYNC", /* Checkpoint Synchronize > call */ > "CPND_EVT_A2ND_CKPT_READ_ACK", /* read ack */ > - "CPND_EVT_A2ND_ARRIVAL_CB_REG", /* Arrival Callback > Register */ > + "CPND_EVT_A2ND_ARRIVAL_CB_REG", /* Track Callback > Register */ > > "CPND_EVT_ND2ND_ACTIVE_STATUS", /* ckpt status info > from active */ /* Not used Anywhere from 3.0.2 */ > "CPND_EVT_ND2ND_ACTIVE_STATUS_ACK", /* ckpt status ack > from active */ /*Not used Anywhere from 3.0.2 */ > @@ -148,6 +149,7 @@ static char *cpnd_evt_str[] = { > "CPND_EVT_D2ND_CKPT_NUM_SECTIONS", > "CPND_EVT_A2ND_CKPT_REFCNTSET", > "CPND_EVT_A2ND_CKPT_LIST_UPDATE", /* Checkpoint ckpt > list update Call */ > + "CPND_EVT_A2ND_ARRIVAL_CB_UNREG", /* Track Callback Un- > Register */ > "CPND_EVT_MAX" > }; > #endif > @@ -264,6 +266,9 @@ void cpnd_process_evt(CPSV_EVT *evt) > case CPND_EVT_A2ND_ARRIVAL_CB_REG: > (void)cpnd_evt_proc_arrival_cbreg(cb, &evt->info.cpnd, > &evt->sinfo); > break; > + case CPND_EVT_A2ND_ARRIVAL_CB_UNREG: > + (void)cpnd_evt_proc_arrival_cbunreg(cb, &evt->info.cpnd, > &evt->sinfo); > + break; > case CPND_EVT_D2ND_CKPT_ACTIVE_SET: /* broadcast message > */ > (void)cpnd_evt_proc_ckpt_active_set(cb, &evt->info.cpnd, > &evt->sinfo); > break; > @@ -3312,6 +3317,38 @@ static uint32_t cpnd_evt_proc_arrival_cb > return rc; > } > > +/********************************************************* > ********************* > + * Name : cpnd_evt_proc_arrival_cbunreg > + * > + * Description : Function to process the arrival callback registration > + * > + * Arguments : CPND_CB *cb - CPND CB pointer > + * CPSV_EVT *evt - Received Event structure > + * CPSV_SEND_INFO *sinfo - Sender MDS information. > + * > + * Return Values : NCSCC_RC_SUCCESS/Error > + * > + > +********************************************************* > ************** > +******/ static uint32_t cpnd_evt_proc_arrival_cbunreg(CPND_CB *cb, > +CPND_EVT *evt, CPSV_SEND_INFO *sinfo) { > + CPND_CKPT_CLIENT_NODE *cl_node = NULL; > + uint32_t rc = NCSCC_RC_SUCCESS; > + > + TRACE_ENTER(); > + cpnd_client_node_get(cb, evt->info.arr_ntfy.client_hdl, &cl_node); > + if (cl_node == NULL) { > + TRACE_4("cpnd client hdl get failed for client_hdl:%llx",evt- > >info.arr_ntfy.client_hdl); > + rc = NCSCC_RC_FAILURE; > + TRACE_LEAVE(); > + return rc; > + } > + cl_node->arrival_cb_flag = false; > + > + cpnd_restart_set_arrcb(cb, cl_node); > + TRACE_LEAVE(); > + return rc; > +} > + > > /********************************************************** > ****************** > * Name : cpnd_evt_proc_nd2nd_ckpt_sync_req > * ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel