SaAisErrorT saAmfFinalize(SaAmfHandleT amfHandle)
{
    ClRcT rc;

    rc = clCpmClientFinalize(amfHandle);

    rc = clASPFinalize();
    
    return clClovisToSafError(rc);
}
SaAisErrorT saCkptFinalize (const SaCkptHandleT ckptHandle)
{
    ClRcT            rc    = CL_OK;
    SaAisErrorT      safRc = SA_AIS_OK;

    rc = clCkptFinalize((ClCkptSvcHdlT)ckptHandle);
    
    /*
     * Translate the clovis error type to SAF error type.
     */
    clErrorTxlate(rc, &safRc);
    
    if(CL_OK != clASPFinalize())
    {
        clLogInfo("CKP", "FIN",
                  "ASP finalize failed, rc[0x%X]", rc);
        return SA_AIS_ERR_LIBRARY;
    }

    return safRc;
}
SaAisErrorT
saClmFinalize (
        const SaClmHandleT clmHandle
        )
{
    ClRcT rc = CL_OK;
    ClHandleT   localHandle = CL_HANDLE_INVALID_VALUE;
    SaClmInstanceT      *clmInstance = NULL;
    
    SA_GMS_CHECK_INIT_COUNT();

    /* Handle checkout */
    localHandle = (ClHandleT)clmHandle;
    rc = clHandleCheckout(databaseHandle, localHandle, (void**)&clmInstance);
    if (rc != CL_OK)
    {
    return _aspErrToAisErr(rc);
}
    CL_ASSERT(clmInstance != NULL);
    
    /* Finalize with GMS */
    rc = clGmsFinalize(localHandle);
    if (rc != CL_OK)
    {
        clLogError("CLM","FIN",
                   "clGmsFinalize failed with rc 0x%x\n",rc);
    }

    /* Deregister with dispatch */
    rc = clDispatchDeregister(clmInstance->dispatchHandle);
    if (rc != CL_OK)
    {
        clLogError(GMS_LOG_AREA_CLM,GMS_LOG_CTX_CLM_FINALISE,
                   "clDispatchDeregister failed with rc 0x%x\n",rc);
    }

    /* Checkin the handle */
    if ((clHandleCheckin(databaseHandle, localHandle)) != CL_OK)
    {
        clLogError(GMS_LOG_AREA_CLM,GMS_LOG_CTX_CLM_FINALISE,
                    "clHandleCheckin failed");
    }

    /* Destroy the handle */
    if ((clHandleDestroy(databaseHandle, localHandle)) != CL_OK)
    {
        clLogError(GMS_LOG_AREA_CLM,GMS_LOG_CTX_CLM_FINALISE,
                   "clHandleDestroy failed");
    }

    SA_GMS_INIT_COUNT_DEC();
    if (isLastFinalize() == CL_TRUE)
    {
        rc = clHandleDatabaseDestroy(databaseHandle);
        if (rc != CL_OK)
        {
            clLogError(GMS_LOG_AREA_CLM,GMS_LOG_CTX_CLM_DB,
                       "clHandleDatabaseDestroy failed with rc 0x%x\n",rc);
        }
    }
    
    if(CL_OK != clASPFinalize())
    {
        clLogInfo("CLM", "FIN",
                  "ASP finalize failed, rc[0x%X]", rc);
        return SA_AIS_ERR_LIBRARY;
    }

    return _aspErrToAisErr(rc);
}