Dear Mahesh,

Thank you very much for your help.
Compared to your test app I found my test stop too soon.
After reboot I just check shm existence, did not check to open again.

I will send fix patch soon after carefully test it again.

Thank you and best regards,
Hoang

-----Original Message-----
From: A V Mahesh [mailto:mahesh.va...@oracle.com] 
Sent: Wednesday, October 26, 2016 11:02 AM
To: Vo Minh Hoang <hoang.m...@dektech.com.au>; anders.wid...@ericsson.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [PATCH 1 of 1] cpnd: use shared memory based on ckpt name
length [#2108] V2

Hi Hoang,

The attached  `test_#2108_app.c` application will generate cpnd shm open 
request is getting failed case

#gcc test_#2108_app.c -o checkpoint -lSaCkpt

-AVM

On 10/25/2016 12:23 PM, A V Mahesh wrote:
> Hi Hoang,
>
> On 10/25/2016 12:10 PM, Vo Minh Hoang wrote:
>> Would you please tell me the process to reproduce this error?
> I will write standalone application and will share with you .
>
> -AVM
>
> On 10/25/2016 12:10 PM, Vo Minh Hoang wrote:
>> Dear Mahesh,
>>
>> Thank you very much for your checking.
>> It is very strangle that I tested with 2 following case:
>> - restart nd by kill -9 <ckptnd pid>
>> - restart node by kill -9 <amfd pid>
>> Both cases executed well in my local machine.
>>
>> Would you please tell me the process to reproduce this error?
>> It is very strangle that ER is cannot open replica's shm that is not in
>> touch of this patch.
>>
>> Thank you and best regards,
>> Hoang
>>
>> -----Original Message-----
>> From: A V Mahesh [mailto:mahesh.va...@oracle.com]
>> Sent: Tuesday, October 25, 2016 12:53 PM
>> To: Hoang Vo <hoang.m...@dektech.com.au>; anders.wid...@ericsson.com
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: Re: [PATCH 1 of 1] cpnd: use shared memory based on ckpt name
>> length [#2108] V2
>>
>> Hi Hoang,
>>
>> With the patch after CPND restart cpnd shm open request is getting 
>> failed
>>
>> please test CPND restart cases.
>>
>>
============================================================================

>>
>> ================================
>>
>> 1111 saCkptCheckpointOpen  returned checkpointHandle 626040
>> 222 saCkptCheckpointOpen  returned checkpointHandle 6261f0
>>    Before pkill osafckptnd  saCkptCheckpointOpen2222
>> root     23946     1  0 11:14 ?        00:00:00
>> /usr/lib64/opensaf/osafckptnd
>> root     24041 24038  0 11:15 pts/0    00:00:00 sh -c ps -ef | grep
>> osafckptnd
>> root     24043 24041  0 11:15 pts/0    00:00:00 grep osafckptnd
>> Oct 25 11:15:07 SC-1 osafckptnd[23946]: exiting for shutdown
>> Oct 25 11:15:07 SC-1 osafamfnd[23844]: NO
>> 'safSu=SC-1,safSg=NoRed,safApp=OpenSAF' component restart probation
>> timer started (timeout: 60000000000 ns)
>> Oct 25 11:15:07 SC-1 osafamfnd[23844]: NO Restarting a component of
>> 'safSu=SC-1,safSg=NoRed,safApp=OpenSAF' (comp restart count: 1)
>> Oct 25 11:15:07 SC-1 osafamfnd[23844]: NO
>> 'safComp=CPND,safSu=SC-1,safSg=NoRed,safApp=OpenSAF' faulted due to
>> 'avaDown' : Recovery is 'componentRestart'
>> Oct 25 11:15:07 SC-1 osafckptd[23989]: NO cpnd_down_process:: Start
>> CPND_RETENTION timer id = 0x663f10, arg=0x664020
>> Oct 25 11:15:07 SC-1 osafckptnd[24058]: Started
>>    VVVVVVVVVV saCkptCheckpointOpen 3rd may hit try again returned 18.
>> 333 saCkptCheckpointOpen  returned checkpointHandle 7f29fbdc7588
>>    VVVVVVVVVV saCkptCheckpointOpen 4th returned may hit try again
>> returned 12.
>> 444 saCkptCheckpointOpen  returned checkpointHandle 7fffb4a097d8
>>    saCkptCheckpointOpen 5th returned 12.
>> 5555 saCkptCheckpointOpen  returned checkpointHandle 7f29fbdf61a8
>>    Before pkill osafckptnd & saCkptCheckpointClose
>> root     24058     1  0 11:15 ?        00:00:00
>> /usr/lib64/opensaf/osafckptnd
>> root     24063 24038  0 11:15 pts/0    00:00:00 sh -c ps -ef | grep
>> osafckptnd
>> root     24065 24063  0 11:15 pts/0    00:00:00 grep osafckptnd
>> Oct 25 11:15:19 SC-1 osafckptnd[24058]: exiting for shutdown
>> Oct 25 11:15:19 SC-1 osafamfnd[23844]: NO Restarting a component of
>> 'safSu=SC-1,safSg=NoRed,safApp=OpenSAF' (comp restart count: 2)
>> Oct 25 11:15:19 SC-1 osafamfnd[23844]: NO
>> 'safComp=CPND,safSu=SC-1,safSg=NoRed,safApp=OpenSAF' faulted due to
>> 'avaDown' : Recovery is 'componentRestart'
>> Oct 25 11:15:19 SC-1 osafckptnd[24080]: Started
>> Oct 25 11:15:19 SC-1 osafckptnd[24080]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> Oct 25 11:15:19 SC-1 osafckptnd[24080]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> 1111 saCkptCheckpointClose  checkpointHandle 626040
>> Attempt 0-0:  saCkptCheckpointClose returned 12.
>> 222 saCkptCheckpointClose  checkpointHandle 6261f0
>> Attempt 0-0:  saCkptCheckpointClose returned 12.
>> 333 saCkptCheckpointClose  checkpointHandle 7f29fbdc7588
>> Attempt 0-0:  saCkptCheckpointClose returned 9.
>> 4444 saCkptCheckpointClose  checkpointHandle 7fffb4a097d8
>> Attempt 0-0:  saCkptCheckpointClose returned 9.
>> 555 saCkptCheckpointClose  checkpointHandle 7f29fbdf61a8
>> Attempt 0-0:  saCkptCheckpointClose returned 9.
>> 1111 saCkptCheckpointOpen  returned checkpointHandle 626040
>> 222 saCkptCheckpointOpen  returned checkpointHandle 628b40
>>    Before pkill osafckptnd  saCkptCheckpointOpen2222
>> root     24080     1  0 11:15 ?        00:00:00
>> /usr/lib64/opensaf/osafckptnd
>> root     24085 24038  0 11:15 pts/0    00:00:00 sh -c ps -ef | grep
>> osafckptnd
>> root     24087 24085  0 11:15 pts/0    00:00:00 grep osafckptnd
>> Oct 25 11:15:26 SC-1 osafckptnd[24080]: exiting for shutdown
>> Oct 25 11:15:26 SC-1 osafamfnd[23844]: NO Restarting a component of
>> 'safSu=SC-1,safSg=NoRed,safApp=OpenSAF' (comp restart count: 3)
>> Oct 25 11:15:26 SC-1 osafamfnd[23844]: NO
>> 'safComp=CPND,safSu=SC-1,safSg=NoRed,safApp=OpenSAF' faulted due to
>> 'avaDown' : Recovery is 'componentRestart'
>> Oct 25 11:15:26 SC-1 osafckptd[23989]: NO cpnd_down_process:: Start
>> CPND_RETENTION timer id = 0x663f10, arg=0x664020
>> Oct 25 11:15:26 SC-1 osafckptnd[24102]: Started
>> Oct 25 11:15:26 SC-1 osafckptnd[24102]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> Oct 25 11:15:26 SC-1 osafckptnd[24102]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>>    VVVVVVVVVV saCkptCheckpointOpen 3rd may hit try again returned 18.
>> 333 saCkptCheckpointOpen  returned checkpointHandle 0
>>    VVVVVVVVVV saCkptCheckpointOpen 4th returned may hit try again
>> returned 12.
>> 444 saCkptCheckpointOpen  returned checkpointHandle 0
>>    saCkptCheckpointOpen 5th returned 12.
>> 5555 saCkptCheckpointOpen  returned checkpointHandle 0
>>    Before pkill osafckptnd & saCkptCheckpointClose
>> root     24102     1  0 11:15 ?        00:00:00
>> /usr/lib64/opensaf/osafckptnd
>> root     24107 24038  0 11:15 pts/0    00:00:00 sh -c ps -ef | grep
>> osafckptnd
>> root     24109 24107  0 11:15 pts/0    00:00:00 grep osafckptnd
>> Oct 25 11:15:38 SC-1 osafckptnd[24102]: exiting for shutdown
>> Oct 25 11:15:38 SC-1 osafamfnd[23844]: NO Restarting a component of
>> 'safSu=SC-1,safSg=NoRed,safApp=OpenSAF' (comp restart count: 4)
>> Oct 25 11:15:38 SC-1 osafamfnd[23844]: NO
>> 'safComp=CPND,safSu=SC-1,safSg=NoRed,safApp=OpenSAF' faulted due to
>> 'avaDown' : Recovery is 'componentRestart'
>> Oct 25 11:15:38 SC-1 osafckptnd[24124]: Started
>> Oct 25 11:15:38 SC-1 osafckptnd[24124]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> Oct 25 11:15:38 SC-1 osafckptnd[24124]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> Oct 25 11:15:38 SC-1 osafckptnd[24124]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_2
>> Oct 25 11:15:38 SC-1 osafckptnd[24124]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_2
>> 1111 saCkptCheckpointClose  checkpointHandle 626040
>> Attempt 1-0:  saCkptCheckpointClose returned 12.
>> 222 saCkptCheckpointClose  checkpointHandle 628b40
>> Attempt 1-0:  saCkptCheckpointClose returned 12.
>> 333 saCkptCheckpointClose  checkpointHandle 0
>> Attempt 1-0:  saCkptCheckpointClose returned 9.
>> 4444 saCkptCheckpointClose  checkpointHandle 0
>> Attempt 1-0:  saCkptCheckpointClose returned 9.
>> 555 saCkptCheckpointClose  checkpointHandle 0
>> Attempt 1-0:  saCkptCheckpointClose returned 9.
>> 1111 saCkptCheckpointOpen  returned checkpointHandle 626040
>> 222 saCkptCheckpointOpen  returned checkpointHandle 628b40
>>    Before pkill osafckptnd  saCkptCheckpointOpen2222
>> root     24124     1  0 11:15 ?        00:00:00
>> /usr/lib64/opensaf/osafckptnd
>> root     24129 24038  0 11:15 pts/0    00:00:00 sh -c ps -ef | grep
>> osafckptnd
>> root     24131 24129  0 11:15 pts/0    00:00:00 grep osafckptnd
>> Oct 25 11:15:45 SC-1 osafckptnd[24124]: exiting for shutdown
>> Oct 25 11:15:45 SC-1 osafamfnd[23844]: NO Restarting a component of
>> 'safSu=SC-1,safSg=NoRed,safApp=OpenSAF' (comp restart count: 5)
>> Oct 25 11:15:45 SC-1 osafamfnd[23844]: NO
>> 'safComp=CPND,safSu=SC-1,safSg=NoRed,safApp=OpenSAF' faulted due to
>> 'avaDown' : Recovery is 'componentRestart'
>> Oct 25 11:15:45 SC-1 osafckptd[23989]: NO cpnd_down_process:: Start
>> CPND_RETENTION timer id = 0x663f10, arg=0x664020
>> Oct 25 11:15:45 SC-1 osafckptnd[24146]: Started
>> Oct 25 11:15:45 SC-1 osafckptnd[24146]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> Oct 25 11:15:45 SC-1 osafckptnd[24146]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_1
>> Oct 25 11:15:45 SC-1 osafckptnd[24146]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_2
>> Oct 25 11:15:45 SC-1 osafckptnd[24146]: ER cpnd shm open request failed
>> safCkpt=checkpoint_tes_131343_2
>>    VVVVVVVVVV saCkptCheckpointOpen 3rd may hit try again returned 18.
>>
>>
============================================================================

>>
>> ===========================================================
>>
>> -AVM
>>
>> On 10/21/2016 8:11 AM, Hoang Vo wrote:
>>> osaf/libs/common/cpsv/include/cpsv_shm.h |   28 +-
>>>    osaf/services/saf/cpsv/cpnd/cpnd_res.c   |  859
>> +++++++++++-------------------
>>>    2 files changed, 336 insertions(+), 551 deletions(-)
>>>
>>>
>>> problem: In the case of CKPT osafckptnd increased 3,5Mb - 240 
>>> percent on
>> all nodes
>>> CKPT_INFO size inscrease when support longDN lead to total size 
>>> increase.
>>>
>>> solution:
>>> - From start, cpnd use old format shm.
>>> - Run time cpnd keep using old format shm until first longDN 
>>> checkpoint is
>> created.
>>> After that cpnd create extended format shm for longDN use.
>>> - Fix init size for shm.
>>>
>>> diff --git a/osaf/libs/common/cpsv/include/cpsv_shm.h
>> b/osaf/libs/common/cpsv/include/cpsv_shm.h
>>> --- a/osaf/libs/common/cpsv/include/cpsv_shm.h
>>> +++ b/osaf/libs/common/cpsv/include/cpsv_shm.h
>>> @@ -27,7 +27,9 @@
>>>    #define SHM_NEXT -3
>>>    #define SHM_INIT -1
>>>    -#define CPSV_CPND_SHM_VERSION    1
>>> +#define CPSV_CPND_SHM_VERSION            1
>>> +#define CPSV_CPND_SHM_VERSION_DEPRECATE    2
>>> +#define CPSV_CPND_SHM_VERSION_EXTENDED    3
>>>       typedef struct cpsv_ckpt_hdr {
>>>        SaCkptCheckpointHandleT ckpt_id;    /* Index for identifying the
>> checkpoint */
>>> @@ -57,7 +59,7 @@ typedef struct cpsv_sect_hdr {
>>>    } CPSV_SECT_HDR;
>>>       typedef struct ckpt_info {
>>> -    char ckpt_name[kOsafMaxDnLength];
>>> +    SaNameT ckpt_name;
>>>        SaCkptCheckpointHandleT ckpt_id;
>>>        uint32_t maxSections;
>>>        SaSizeT maxSecSize;
>>> @@ -74,23 +76,10 @@ typedef struct ckpt_info {
>>>        int32_t next;
>>>    } CKPT_INFO;
>>>    -typedef struct ckpt_info_v0 {
>>> -    SaNameT ckpt_name;
>>> -    SaCkptCheckpointHandleT ckpt_id;
>>> -    uint32_t maxSections;
>>> -    SaSizeT maxSecSize;
>>> -    NODE_ID node_id;
>>> -    int32_t offset;
>>> -    uint32_t client_bitmap;
>>> -    int32_t is_valid;
>>> -    uint32_t bm_offset;
>>> -    bool is_unlink;
>>> -    bool is_close;
>>> -    bool cpnd_rep_create;
>>> -    bool is_first;
>>> -    SaTimeT close_time;
>>> -    int32_t next;
>>> -} CKPT_INFO_V0;
>>> +typedef struct ckpt_extend_info {
>>> +    char ckpt_name[kOsafMaxDnLength + 1];
>>> +    uint32_t is_valid;
>>> +} CKPT_EXTENDED_INFO;
>>>       typedef struct client_info {
>>>        SaCkptHandleT ckpt_app_hdl;
>>> @@ -109,6 +98,7 @@ typedef struct gbl_shm_ptr {
>>>        void *base_addr;
>>>        void *cli_addr;
>>>        void *ckpt_addr;
>>> +    void *extended_addr;    /* Added in CPSV_CPND_SHM_VERSION_EXTENDED
>> */
>>>        int32_t n_clients;
>>>        int32_t n_ckpts;
>>>    } GBL_SHM_PTR;
>>> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_res.c
>> b/osaf/services/saf/cpsv/cpnd/cpnd_res.c
>>> --- a/osaf/services/saf/cpsv/cpnd/cpnd_res.c
>>> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_res.c
>>> @@ -40,8 +40,6 @@
>>>       #define m_CPND_CKPTINFO_READ(ckpt_info,addr,offset)
>> memcpy(&ckpt_info,addr+offset,sizeof(CKPT_INFO))
>>>    -#define m_CPND_CKPTINFO_V0_READ(ckpt_info,addr,offset)
>> memcpy(&ckpt_info,addr+offset,sizeof(CKPT_INFO_V0))
>>> -
>>>    #define m_CPND_CKPTINFO_UPDATE(addr,ckpt_info,offset)
>> memcpy(addr+offset,&ckpt_info,sizeof(CKPT_INFO))
>>>       #define m_CPND_CKPTHDR_UPDATE(ckpt_hdr,offset)
>> memcpy(offset,&ckpt_hdr,sizeof(CKPT_HDR))
>>> @@ -50,13 +48,10 @@ static uint32_t cpnd_res_ckpt_sec_add(CP
>>>    static bool cpnd_find_exact_ckptinfo(CPND_CB *cb, CKPT_INFO 
>>> *ckpt_info,
>> uint32_t bitmap_offset,
>>>                         uint32_t *offset, uint32_t
>> *prev_offset);
>>>    static void cpnd_clear_ckpt_info(CPND_CB *cb, CPND_CKPT_NODE 
>>> *cp_node,
>> uint32_t curr_offset, uint32_t prev_offset);
>>> -static uint32_t cpnd_restore_client_info(CPND_CB *cb, uint8_t 
>>> *cli_addr);
>>> -static uint32_t cpnd_restore_ckpt_info_v1(CPND_CB *cb, uint8_t
>> *ckpt_addr, SaClmNodeIdT nodeid);
>>> -static uint32_t cpnd_restore_ckpt_info_v0(CPND_CB *cb, uint8_t
>> *ckpt_addr, SaClmNodeIdT nodeid);
>>> -static void 
>>> cpnd_destroy_shm_cpnd_cp_info(NCS_OS_POSIX_SHM_REQ_OPEN_INFO
>> *open_req);
>>> -static void *cpnd_create_shm_cpnd_cp_info(NCS_OS_POSIX_SHM_REQ_INFO
>> *req_info);
>>> -static void cpnd_update_shm_cpnd_cp_info(CPND_CB *cb);
>>> -static void cpnd_convert_cp_info_v0(CKPT_INFO_V0 *cp_info_v0, 
>>> CKPT_INFO
>> *cp_info);
>>> +static void cpnd_destroy_shm(NCS_OS_POSIX_SHM_REQ_OPEN_INFO 
>>> *open_req);
>>> +static uint32_t cpnd_shm_extended_open(CPND_CB *cb, uint32_t flag);
>>> +static uint32_t cpnd_extended_name_lend(SaConstStringT value, SaNameT*
>> name);
>>> +static void cpnd_extended_name_free(const SaNameT* name);
>>>
>>
/***************************************************************************

>>
>> **** *
>>>     * Name           : cpnd_client_extract_bits
>>> @@ -324,10 +319,24 @@ void cpnd_restart_update_timer(CPND_CB *
>>>       void *cpnd_restart_shm_create(NCS_OS_POSIX_SHM_REQ_INFO 
>>> *cpnd_open_req,
>> CPND_CB *cb, SaClmNodeIdT nodeid)
>>>    {
>>> -    uint32_t rc = NCSCC_RC_SUCCESS;
>>> +    uint32_t counter = 0, count, num_bitset = 0, n_clients, rc =
>> NCSCC_RC_SUCCESS, bit_position;
>>> +    uint64_t i_offset;
>>> +    int32_t next_offset;
>>> +    CPND_CKPT_CLIENT_NODE *cl_node = NULL;
>>> +    CPND_CKPT_NODE *cp_node = NULL;
>>> +    CLIENT_INFO cl_info;
>>> +    CLIENT_HDR cli_hdr;
>>> +    CKPT_INFO cp_info, tmp_cp_info;
>>> +    SaCkptHandleT client_hdl;
>>>        char *buf = NULL, *buffer = NULL;
>>>        uint8_t size = 0, total_length;
>>>        GBL_SHM_PTR gbl_shm_addr = {0, 0, 0, 0, 0};
>>> +    memset(&cp_info, '\0', sizeof(CKPT_INFO));
>>> +    NCS_OS_POSIX_SHM_REQ_INFO ckpt_rep_open;
>>> +    SaTimeT presentTime, timeout = 0;
>>> +    int64_t now, diff_time, giga_sec;
>>> +    uint32_t max_client_hdl = 0;
>>> +    SaTimeT tmpTime = 0;
>>>        CPND_SHM_VERSION cpnd_shm_version;
>>>           TRACE_ENTER();
>>> @@ -349,7 +358,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS
>>>           /* 1. FIRST TRYING TO OPEN IN RDWR MODE */
>>>        cpnd_open_req->type = NCS_OS_POSIX_SHM_REQ_OPEN;
>>> -    cpnd_open_req->info.open.i_size =
>>> +    cpnd_open_req->info.open.i_size = sizeof(CPND_SHM_VERSION) +
>>>            sizeof(CLIENT_HDR) + (MAX_CLIENTS * sizeof(CLIENT_INFO)) +
>> sizeof(CKPT_HDR) +
>>>            (MAX_CKPTS * sizeof(CKPT_INFO));
>>>        if (cb->shm_alloc_guaranteed == true)
>>> @@ -366,15 +375,19 @@ void *cpnd_restart_shm_create(NCS_OS_POS
>>>           if (rc == NCSCC_RC_FAILURE) {    /* INITIALLY IT FAILS SO 
>>> CREATE A
>> SHARED MEMORY */
>>>            TRACE_1("cpnd comming up first time");
>>> -
>>> -        if (NULL == cpnd_create_shm_cpnd_cp_info(cpnd_open_req)) {
>>> +        cpnd_open_req->info.open.i_flags = O_CREAT | O_RDWR;
>>> +        rc = ncs_os_posix_shm(cpnd_open_req);
>>> +        if (NCSCC_RC_FAILURE == rc) {
>>>                LOG_ER("cpnd open request fail for RDWR mode
>> %s",buf);
>>> m_MMGR_FREE_CPND_DEFAULT(buffer);
>>>                return NULL;
>>>            }
>>> -
>>>            cb->cpnd_first_time = true;
>>>    +        memset(cpnd_open_req->info.open.o_addr, 0,
>> sizeof(CPND_SHM_VERSION) +
>>> +               sizeof(CLIENT_HDR) + (MAX_CLIENTS *
>> sizeof(CLIENT_INFO)) + sizeof(CKPT_HDR) +
>>> +               (MAX_CKPTS * sizeof(CKPT_INFO)));
>>> +        memcpy(cpnd_open_req->info.open.o_addr, &cpnd_shm_version,
>> sizeof(cpnd_shm_version));
>>>            TRACE_1("cpnd new shm create request success");
>>>            return cpnd_open_req->info.open.o_addr;
>>>        }
>>> @@ -390,53 +403,231 @@ void *cpnd_restart_shm_create(NCS_OS_POS
>>>           /* Already the shared memory exists */
>>>        else {
>>> -        CPND_SHM_VERSION shm_version;
>>>            TRACE_1("cpnd restart already shared memory exits");
>>> +        /* Update version value from existing shared memory */
>>> +        memcpy(&cpnd_shm_version, cpnd_open_req->info.open.o_addr,
>> sizeof(cpnd_shm_version));
>>> +
>>>            gbl_shm_addr.cli_addr = cpnd_open_req->info.open.o_addr +
>> sizeof(cpnd_shm_version);    /* Starting address of the shared memory */
>>>            gbl_shm_addr.ckpt_addr = (void *)((char
>> *)gbl_shm_addr.cli_addr + sizeof(CLIENT_HDR) +
>>> (MAX_CLIENTS *
>> sizeof(CLIENT_INFO)));
>>>            cb->shm_addr = gbl_shm_addr;
>>> -        memcpy(&shm_version, cpnd_open_req->info.open.o_addr,
>> sizeof(shm_version));
>>> +
>>> +        switch (cpnd_shm_version.shm_version) {
>>> +            case CPSV_CPND_SHM_VERSION:
>>> +                /* Do nothing, continue with next step */
>>> +                break;
>>> +            case CPSV_CPND_SHM_VERSION_EXTENDED:
>>> +                /* Update extended address */
>>> +                rc = cpnd_shm_extended_open(cb, O_RDWR);
>>> +                break;
>>> +            default:
>>> +                /* Unsupport version, should discard old and
>> open new one */
>>> + cpnd_destroy_shm(&cpnd_open_req->info.open);
>>> +                m_MMGR_FREE_CPND_DEFAULT(buffer);
>>> +                return
>> cpnd_restart_shm_create(cpnd_open_req, cb, nodeid);
>>> +        }
>>> +
>>> +        if (rc != NCSCC_RC_SUCCESS) {
>>> +            m_MMGR_FREE_CPND_DEFAULT(buffer);
>>> +            return NULL;
>>> +        }
>>>               /* READ FROM THE SHARED MEMORY */
>>>    -        TRACE("CPND IS RESTARTING WITH VERSION %d",
>> shm_version.shm_version);
>>> -        cpnd_restore_client_info(cb, gbl_shm_addr.cli_addr);
>>> -        switch (shm_version.shm_version) {
>>> -        case 0:
>>> -        {
>>> -            cpnd_restore_ckpt_info_v0(cb,
>> gbl_shm_addr.ckpt_addr, nodeid);
>>> +        TRACE("CPND IS RESTARTING ");
>>> +        /* Read the number of clients from the header */
>>> +        memset(&cli_hdr, '\0', sizeof(CLIENT_HDR));
>>> +        m_CPND_CLIHDR_INFO_READ(cli_hdr, (char
>> *)gbl_shm_addr.cli_addr, 0);
>>>    -            /* Destroy the CPND_CHECKPOINT_INFO version 0 */
>>> -
>> cpnd_destroy_shm_cpnd_cp_info(&cpnd_open_req->info.open);
>>> +        n_clients = cli_hdr.num_clients;
>>> +        TRACE_1("cpnd num clients read ");
>>> +        /* ( DO - WHILE )-  READ THE CLIENT INFO AND FILL THE
>> DATABASE OF CLIENT INFO */
>>> +        if (n_clients != 0) {
>>> +            while (counter < MAX_CLIENTS) {
>>> +                memset(&cl_info, '\0', sizeof(CLIENT_INFO));
>>> +                if ((counter * sizeof(CLIENT_INFO)) >
>> INTMAX_MAX) {
>>> +                    LOG_ER("cpnd ckpt shm create
>> failed,exceeded the write limits(UINT64_MAX) ");
>>> +                }
>>> +                i_offset = counter * sizeof(CLIENT_INFO);
>>> +                m_CPND_CLINFO_READ(cl_info, (char
>> *)gbl_shm_addr.cli_addr + sizeof(CLIENT_HDR),
>>> +                           i_offset);
>>>    -            /* Create the CPND_CHECKPOINT_INFO version 1 */
>>> -            if (NULL ==
>> cpnd_create_shm_cpnd_cp_info(cpnd_open_req)) {
>>> -                LOG_ER("cpnd open request fail for RDWR mode
>> %s",buf);
>>> - m_MMGR_FREE_CPND_DEFAULT(buffer);
>>> -                return NULL;
>>> +                if (cl_info.ckpt_app_hdl == 0) {
>>> +                    counter++;
>>> +                    continue;
>>> +                }
>>> +
>>> +                cl_node =
>> m_MMGR_ALLOC_CPND_CKPT_CLIENT_NODE;
>>> +                if (cl_node == NULL) {
>>> +                    LOG_ER("cpnd ckpt client node memory
>> alloc failed ");
>>> +                    rc = SA_AIS_ERR_NO_MEMORY;
>>> +                    goto memfail;
>>> +                }
>>> +                memset(cl_node, '\0',
>> sizeof(CPND_CKPT_CLIENT_NODE));
>>> + cl_node->ckpt_app_hdl =
>> cl_info.ckpt_app_hdl;
>>> + cl_node->ckpt_open_ref_cnt =
>> cl_info.ckpt_open_ref_cnt;
>>> + cl_node->open_reader_flags_cnt =
>> cl_info.open_reader_flags_cnt;
>>> + cl_node->open_writer_flags_cnt =
>> cl_info.open_writer_flags_cnt;
>>> + cl_node->agent_mds_dest =
>> cl_info.agent_mds_dest;
>>> +                cl_node->offset = cl_info.offset;
>>> +                cl_node->version = cl_info.version;
>>> +                cl_node->arrival_cb_flag = cl_info.arr_flag;
>>> +                cl_node->ckpt_list = NULL;
>>> +
>>> +                if (cpnd_client_node_add(cb, cl_node) !=
>> NCSCC_RC_SUCCESS) {
>>> +                    TRACE_4("cpnd client nonde tree add
>> failed cpkpt_app_hdl %llx ",cl_node->ckpt_app_hdl);
>>> +                    rc = SA_AIS_ERR_NO_MEMORY;
>>> +                    goto node_add_fail;
>>> +                }
>>> +                counter++;
>>> +                if (cl_info.ckpt_app_hdl > max_client_hdl) {
>>> +                    max_client_hdl =
>> cl_info.ckpt_app_hdl;
>>> +                    cb->cli_id_gen =
>> cl_info.ckpt_app_hdl + 1;
>>> +                }
>>> +                TRACE_1("cpnd client info read success");
>>>                }
>>> +        }
>>> +        counter = 0;
>>>    -            /* Update the CPND_CHECKPOINT_INFO version 1 */
>>> -            gbl_shm_addr.cli_addr =
>> cpnd_open_req->info.open.o_addr + sizeof(cpnd_shm_version);     /* 
>> Starting
>> address of the shared memory */
>>> -            gbl_shm_addr.ckpt_addr = (void *)((char
>> *)gbl_shm_addr.cli_addr + sizeof(CLIENT_HDR) +
>>> -
>> (MAX_CLIENTS * sizeof(CLIENT_INFO)));
>>> -            cb->shm_addr = gbl_shm_addr;
>>> -            cpnd_update_shm_cpnd_cp_info(cb);
>>> +        /* TO READ THE NUMBER OF CHECKPOINTS FROM THE HEADER */
>>> +        while (counter < MAX_CKPTS) {
>>> +            memset(&cp_info, '\0', sizeof(CKPT_INFO));
>>> +            if ((counter * sizeof(CKPT_INFO)) > UINTMAX_MAX) {
>>> +                LOG_ER("cpnd ckpt shm create failed,exceeded
>> the write limits(UINT64_MAX) ");
>>> +            }
>>> +            i_offset = counter * sizeof(CKPT_INFO);
>>> +            m_CPND_CKPTINFO_READ(cp_info, (char
>> *)gbl_shm_addr.ckpt_addr + sizeof(CKPT_HDR), i_offset);
>>>    -            break;
>>> -        }
>>> -        case 1:
>>> -            cpnd_restore_ckpt_info_v1(cb,
>> gbl_shm_addr.ckpt_addr, nodeid);
>>> -            break;
>>> -        default:
>>> -            LOG_ER("cpnd share memory version invalide");
>>> -            break;
>>> -        }
>>> +            if (cp_info.is_valid == 0) {
>>> +                counter++;
>>> +                continue;
>>> +            }
>>> +            if (cp_info.is_first) {
>>> +                cp_node = m_MMGR_ALLOC_CPND_CKPT_NODE;
>>> +                if (cp_node == NULL) {
>>> +                    LOG_ER("cpnd ckpt node memory
>> allocation failed");
>>> +                    goto memfail;
>>> +                }
>>>    +                memset(cp_node, '\0',
>> sizeof(CPND_CKPT_NODE));
>>> +                cp_node->ckpt_name =
>> osaf_extended_name_borrow(&cp_info.ckpt_name);
>>> +                cp_node->ckpt_id = cp_info.ckpt_id;
>>> +                cp_node->offset = cp_info.offset;
>>> +                cp_node->is_close = cp_info.is_close;
>>> +                cp_node->is_unlink = cp_info.is_unlink;
>>> +                cp_node->close_time = cp_info.close_time;
>>> +                cp_node->cpnd_rep_create =
>> cp_info.cpnd_rep_create;
>>> +
>> cpnd_ckpt_sec_map_init(&cp_node->replica_info);
>>> +
>>> +                /* Non-collocated Differentiator flag */
>>> +                if (cp_info.cpnd_rep_create) {
>>> +                    /* OPEN THE SHARED MEMORY ALREADY
>> CREATED FOR CHECKPOINT REPLICA */
>>> +                    /* size=cp_node->ckpt_name.length;
>> */
>>> +                    buf =
>> m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH);
>>> +                    memset(buf, '\0',
>> CPND_MAX_REPLICA_NAME_LENGTH);
>>> +                    strncpy(buf, cp_node->ckpt_name,
>> CPND_REP_NAME_MAX_CKPT_NAME_LENGTH);
>>> +                    sprintf(buf + strlen(buf) - 1,
>> "_%u_%llu", (uint32_t)nodeid, cp_node->ckpt_id);
>>> +                    rc =
>> cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info,
>> cb->shm_alloc_guaranteed);
>>> +                    if (rc != NCSCC_RC_SUCCESS) {
>>> +                        /*   assert(0); */
>>> +                        TRACE_4("cpnd ckpt replica
>> create failed with return value %d",rc);
>>> +
>>> +                        counter++;
>>> +                        continue;
>>> +                    }
>>> +                    cb->num_rep++;
>>> +                }
>>> +                if (cp_node->is_unlink) {
>>> +                    free((void *)cp_node->ckpt_name);
>>> +                    cp_node->ckpt_name = strdup("");
>>> +                }
>>> +
>>> +                memset(&tmp_cp_info, '\0',
>> sizeof(CKPT_INFO));
>>> + memcpy(&tmp_cp_info, &cp_info,
>> sizeof(CKPT_INFO));
>>> +                next_offset = cp_info.offset;
>>> +                while (next_offset >= 0) {
>>> +                    num_bitset =
>> client_bitmap_isset(tmp_cp_info.client_bitmap);    /* To check which 
>> clients
>> opened this checkpoint */
>>> + cp_node->ckpt_lcl_ref_cnt =
>> cp_node->ckpt_lcl_ref_cnt + num_bitset;
>>> +                    bit_position = 0;
>>> +                    for (count = 1; count <= num_bitset;
>> count++) {
>>> +                        client_hdl =
>> cpnd_client_extract_bits(tmp_cp_info.client_bitmap, 
>> &bit_position);    /*
>> This will return the client which opened this checkpoint */
>>> +                        TRACE_1("cpnd client handle
>> extracted ");
>>> +                        client_hdl =
>> (tmp_cp_info.bm_offset * 32) + client_hdl;
>>> + cpnd_client_node_get(cb,
>> client_hdl, &cl_node);    /* already in the above do-while , we added 
>> client
>> node to client tree */
>>> +                        if (cl_node == NULL) {
>>> +                            /* this should not
>> have happened , quit */
>>> +                            /* assert(0); */
>>> +                            TRACE_4("cpnd client
>> node get failed client hdl: %llx",client_hdl);
>>> +                            continue;
>>> +                            /* goto end; */
>>> +                        }
>>> +
>> cpnd_ckpt_client_add(cp_node, cl_node);
>>> +                    }
>>> +                    next_offset = tmp_cp_info.next;
>>> +                    if (next_offset >= 0) {
>>> +                        if ((next_offset *
>> sizeof(CKPT_INFO)) > UINTMAX_MAX) {
>>> + LOG_ER("cpnd ckpt
>> shm create failed,exceeded the write limits(UINT64_MAX) ");
>>> +                        }
>>> +                        memset(&tmp_cp_info, '\0',
>> sizeof(CKPT_INFO));
>>> +                        i_offset = next_offset *
>> sizeof(CKPT_INFO);
>>> +
>> m_CPND_CKPTINFO_READ(tmp_cp_info,
>>> + (char
>> *)gbl_shm_addr.ckpt_addr + sizeof(CKPT_HDR),
>>> +
>> i_offset);
>>> +                    }
>>> +
>>> +                }    /* End of clients processing for
>> this cp_node */
>>> +
>>> +                cpnd_ckpt_node_add(cb, cp_node);
>>> +
>>> +                if (cp_info.is_close) {
>>> +                    /* start the timer if exists */
>>> +                    now = m_GET_TIME_STAMP(tmpTime);
>>> +                    giga_sec = 1000000000;
>>> +                    diff_time = now -
>> cp_node->close_time;
>>> +                    /*
>> if((cp_node->create_attrib.retentionDuration) >
>> (SA_TIME_ONE_SECOND*(presentTime - cp_node->close_time))) */
>>> +                    if
>> ((cp_node->create_attrib.retentionDuration) > (giga_sec * diff_time)) {
>>> +                        /*  timeout =
>> cp_node->create_attrib.retentionDuration - 
>> (SA_TIME_ONE_SECOND*(presentTime
>> - cp_node->close_time)); */
>>> +                        timeout =
>>> +
>> cp_node->create_attrib.retentionDuration - (giga_sec * diff_time);
>>> +                        timeout =
>> m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(timeout);
>>> +                    }
>>> +                    if (timeout) {
>>> +                        /* for restart shared memory
>> updation */
>>> +
>> m_GET_TIME_STAMP(presentTime);
>>> +
>> cpnd_restart_update_timer(cb, cp_node, presentTime);
>>> +                        if
>> (!m_CPND_IS_COLLOCATED_ATTR_SET
>>> +
>> (cp_node->create_attrib.creationFlags)) {
>>> +
>> cp_node->ret_tmr.type = CPND_TMR_TYPE_NON_COLLOC_RETENTION;
>>> +                        } else {
>>> +
>> cp_node->ret_tmr.type = CPND_TMR_TYPE_RETENTION;
>>> +                        }
>>> +                        cp_node->ret_tmr.uarg =
>> cb->cpnd_cb_hdl_id;
>>> + cp_node->ret_tmr.ckpt_id =
>> cp_node->ckpt_id;
>>> +
>> cpnd_tmr_start(&cp_node->ret_tmr, timeout);
>>> +                    } else {
>>> +                        if
>> (!m_CPND_IS_COLLOCATED_ATTR_SET
>>> +
>> (cp_node->create_attrib.creationFlags)) {
>>> +
>> cpnd_proc_non_colloc_rt_expiry(cb, cp_node->ckpt_id);
>>> +                        } else {
>>> +
>> cpnd_proc_rt_expiry(cb, cp_node->ckpt_id);
>>> +                        }
>>> +                    }
>>> +                }
>>> +
>>> +            }    /* End of one cp_node processing */
>>> +            counter++;
>>> +        }        /* End of while  after processing all 2000
>> ckpt structs */
>>>        }            /* End of else  CPND after restart */
>>>        TRACE_LEAVE();
>>>        return cpnd_open_req->info.open.o_addr;
>>> + memfail:
>>> + node_add_fail:
>>> +    if (cl_node)
>>> +        cpnd_client_node_tree_cleanup(cb);
>>> +    if (cp_node)
>>> +        cpnd_ckpt_node_tree_cleanup(cb);
>>> +    TRACE_LEAVE();
>>> +    return cpnd_open_req->info.open.o_addr;
>>>    }
>>>       /* TO FIND THE FREE BLOCK */
>>> @@ -858,7 +1049,10 @@ uint32_t cpnd_write_ckpt_info(CPND_CB *c
>>>           TRACE_ENTER();
>>>        memset(&ckpt_info, 0, sizeof(CKPT_INFO));
>>> -    strncpy(ckpt_info.ckpt_name, cp_node->ckpt_name, 
>>> kOsafMaxDnLength);
>>> +    rc = cpnd_extended_name_lend(cp_node->ckpt_name,
>> &ckpt_info.ckpt_name);
>>> +    if (rc != NCSCC_RC_SUCCESS) {
>>> +        return rc;
>>> +    }
>>>        ckpt_info.ckpt_id = cp_node->ckpt_id;
>>>        ckpt_info.maxSections = cp_node->create_attrib.maxSections;
>>>        ckpt_info.maxSecSize = cp_node->create_attrib.maxSectionSize;
>>> @@ -1188,6 +1382,7 @@ void cpnd_clear_ckpt_info(CPND_CB *cb, C
>>>            i_offset = prev_offset * sizeof(CKPT_INFO);
>>>            m_CPND_CKPTINFO_UPDATE((char *)cb->shm_addr.ckpt_addr +
>> sizeof(CKPT_HDR), prev_ckpt_info, i_offset);
>>>    + cpnd_extended_name_free(&curr_ckpt_info.ckpt_name);
>>>            memset(&curr_ckpt_info, '\0', sizeof(CKPT_INFO));
>>>            i_offset = curr_offset * sizeof(CKPT_INFO);
>>>            m_CPND_CKPTINFO_UPDATE((char *)cb->shm_addr.ckpt_addr +
>> sizeof(CKPT_HDR), curr_ckpt_info, i_offset);
>>> @@ -1221,6 +1416,7 @@ void cpnd_clear_ckpt_info(CPND_CB *cb, C
>>>                    LOG_ER("cpnd clear ckpt info failed,exceeded
>> the write limits(UINT64_MAX) ");
>>>                }
>>>                i_offset = (curr_ckpt_info.offset) *
>> sizeof(CKPT_INFO);
>>> + cpnd_extended_name_free(&curr_ckpt_info.ckpt_name);
>>>                memset(&curr_ckpt_info, '\0', sizeof(CKPT_INFO));
>>>                   m_CPND_CKPTINFO_UPDATE((char
>> *)cb->shm_addr.ckpt_addr + sizeof(CKPT_HDR), curr_ckpt_info,
>>> @@ -1302,8 +1498,20 @@ uint32_t cpnd_restart_shm_ckpt_update(CP
>>>        CKPT_INFO ckpt_info;
>>>        memset(&ckpt_info, 0, sizeof(ckpt_info));
>>>        CKPT_HDR ckpt_hdr;
>>> +    uint32_t rc = NCSCC_RC_SUCCESS;
>>>           TRACE_ENTER();
>>> +    /* Check ckpt name input versus shm version and restart shm if 
>>> need
>> */
>>> +    if (strlen(cp_node->ckpt_name) > SA_MAX_UNEXTENDED_NAME_LENGTH &&
>> cb->shm_addr.extended_addr == 0) {
>>> +        /* Open new shared memory */
>>> +        rc = cpnd_shm_extended_open(cb, O_CREAT | O_RDWR);
>>> +        if (rc != NCSCC_RC_SUCCESS) {
>>> +            return rc;
>>> +        }
>>> +        /* Update shared memory version */
>>> + ((CPND_SHM_VERSION*)cb->shm_addr.base_addr)->shm_version =
>> CPSV_CPND_SHM_VERSION_EXTENDED;
>>> +    }
>>> +
>>>        /* check if the ckpt already exists */
>>>        if (cp_node->offset == SHM_INIT) {    /* if it is not there then
>> find the free place to fit into */
>>>            /* now find the free shm for placing the checkpoint info */
>>> @@ -1345,436 +1553,113 @@ uint32_t cpnd_restart_shm_ckpt_update(CP
>>>    }
>>>
>>
/***************************************************************************

>>
>> ******************
>>> - * Name           : cpnd_restore_client_info
>>> + * Name           :  cpnd_shm_extended_open
>>>     *
>>> - * Description    : To restore client information from share memory
>>> + * Description    : Open extended shared memory
>>>     *
>>>     * Arguments      : -
>>>     *
>>>     * Return Values  : -
>>>     *
>>>
>>
****************************************************************************

>>
>> ******************/
>>> -static uint32_t cpnd_restore_client_info(CPND_CB *cb, uint8_t 
>>> *cli_addr)
>>> -{
>>> -    uint32_t counter = 0, n_clients;
>>> -    uint64_t i_offset;
>>> -    CPND_CKPT_CLIENT_NODE *cl_node = NULL;
>>> -    CLIENT_INFO cl_info;
>>> -    CLIENT_HDR cli_hdr;
>>> -    uint32_t max_client_hdl = 0;
>>> +static uint32_t cpnd_shm_extended_open(CPND_CB *cb, uint32_t flag)
>>> +{
>>> +    uint32_t rc = NCSCC_RC_FAILURE;
>>> +    NCS_OS_POSIX_SHM_REQ_INFO cpnd_open_req;
>>> +    memset(&cpnd_open_req, 0, sizeof(cpnd_open_req));
>>> +    uint8_t total_length = strlen("CPND_EXTENDED_INFO") +
>> sizeof(cb->nodeid) + 5;
>>> +    char *buffer = m_MMGR_ALLOC_CPND_DEFAULT(total_length);
>>> +    if (buffer == NULL) {
>>> +        LOG_ER("cpnd default memory allocation failed in cpnd_open
>> in resart shm create");
>>> +        return rc;
>>> +    }
>>> +    cb->cpnd_res_shm_name = (uint8_t*)buffer;
>>> +    memset(buffer, '\0', total_length);
>>> +    strncpy(buffer, "CPND_EXTENDED_INFO", total_length);
>>> +    sprintf(buffer + strlen("CPND_EXTENDED_INFO"), "_%d", cb->nodeid);
>>>    -    TRACE_ENTER();
>>> +    cpnd_open_req.type = NCS_OS_POSIX_SHM_REQ_OPEN;
>>> +    cpnd_open_req.info.open.i_size = MAX_CKPTS *
>> sizeof(CKPT_EXTENDED_INFO);
>>> +    if (cb->shm_alloc_guaranteed == true)
>>> +        cpnd_open_req.info.open.ensures_space = true;
>>> +    else
>>> +        cpnd_open_req.info.open.ensures_space = false;
>>> +    cpnd_open_req.info.open.i_offset = 0;
>>> +    cpnd_open_req.info.open.i_name = buffer;
>>> +    cpnd_open_req.info.open.i_map_flags = MAP_SHARED;
>>> +    cpnd_open_req.info.open.o_addr = cb->shm_addr.extended_addr;
>>> +    cpnd_open_req.info.open.i_flags = flag;
>>>    -    /* Read the number of clients from the header */
>>> -    memset(&cli_hdr, '\0', sizeof(CLIENT_HDR));
>>> -    m_CPND_CLIHDR_INFO_READ(cli_hdr, cli_addr, 0);
>>> +    rc = ncs_os_posix_shm(&cpnd_open_req);
>>>    -    n_clients = cli_hdr.num_clients;
>>> -    TRACE_1("cpnd num clients read - n_clients = %d", n_clients);
>>> -
>>> -    /* ( DO - WHILE )-  READ THE CLIENT INFO AND FILL THE DATABASE OF
>> CLIENT INFO */
>>> -    if (n_clients != 0) {
>>> -        while (counter < MAX_CLIENTS) {
>>> -            memset(&cl_info, '\0', sizeof(CLIENT_INFO));
>>> -            if ((counter * sizeof(CLIENT_INFO)) > INTMAX_MAX) {
>>> -                LOG_ER("cpnd ckpt shm create failed,exceeded
>> the write limits(UINT64_MAX) ");
>>> -            }
>>> -            i_offset = counter * sizeof(CLIENT_INFO);
>>> -            m_CPND_CLINFO_READ(cl_info, cli_addr +
>> sizeof(CLIENT_HDR), i_offset);
>>> -
>>> -            if (cl_info.ckpt_app_hdl == 0) {
>>> -                counter++;
>>> -                continue;
>>> -            }
>>> -
>>> -            cl_node = m_MMGR_ALLOC_CPND_CKPT_CLIENT_NODE;
>>> -            if (cl_node == NULL) {
>>> -                LOG_ER("cpnd ckpt client node memory alloc
>> failed ");
>>> -                TRACE_LEAVE();
>>> -                return SA_AIS_ERR_NO_MEMORY;
>>> -            }
>>> -            memset(cl_node, '\0',
>> sizeof(CPND_CKPT_CLIENT_NODE));
>>> -            cl_node->ckpt_app_hdl = cl_info.ckpt_app_hdl;
>>> -            cl_node->ckpt_open_ref_cnt =
>> cl_info.ckpt_open_ref_cnt;
>>> - cl_node->open_reader_flags_cnt =
>> cl_info.open_reader_flags_cnt;
>>> - cl_node->open_writer_flags_cnt =
>> cl_info.open_writer_flags_cnt;
>>> -            cl_node->agent_mds_dest = cl_info.agent_mds_dest;
>>> -            cl_node->offset = cl_info.offset;
>>> -            cl_node->version = cl_info.version;
>>> -            cl_node->arrival_cb_flag = cl_info.arr_flag;
>>> -            cl_node->ckpt_list = NULL;
>>> -
>>> -            if (cpnd_client_node_add(cb, cl_node) !=
>> NCSCC_RC_SUCCESS) {
>>> -                TRACE_4("cpnd client nonde tree add failed
>> cpkpt_app_hdl %llx ",cl_node->ckpt_app_hdl);
>>> - cpnd_client_node_tree_cleanup(cb);
>>> -                TRACE_LEAVE();
>>> -                return SA_AIS_ERR_NO_MEMORY;
>>> -            }
>>> -            counter++;
>>> -            if (cl_info.ckpt_app_hdl > max_client_hdl) {
>>> -                max_client_hdl = cl_info.ckpt_app_hdl;
>>> -                cb->cli_id_gen = cl_info.ckpt_app_hdl + 1;
>>> -            }
>>> -            TRACE_1("cpnd client info read success");
>>> -        }
>>> +    if (rc == NCSCC_RC_SUCCESS) {
>>> +        cb->shm_addr.extended_addr = cpnd_open_req.info.open.o_addr;
>>>        }
>>> -
>>> -    TRACE_LEAVE();
>>> -    return SA_AIS_OK;
>>> +    return rc;
>>>    }
>>>    -
>>>
>>
/***************************************************************************

>>
>> ******************
>>> - * Name           : cpnd_restore_client_info_v1
>>> + * Name           :  cpnd_extended_name_lend
>>>     *
>>> - * Description    : To restore client information from share memory
>> version 1
>>> + * Description    : Find a free location for extended shared memory
>>>     *
>>>     * Arguments      : -
>>>     *
>>>     * Return Values  : -
>>>     *
>>>
>>
****************************************************************************

>>
>> ******************/
>>> -static uint32_t cpnd_restore_ckpt_info_v1(CPND_CB *cb, uint8_t
>> *ckpt_addr, SaClmNodeIdT nodeid)
>>> -{
>>> -    uint32_t counter = 0, count, num_bitset = 0, rc = 
>>> NCSCC_RC_SUCCESS,
>> bit_position;
>>> -    uint64_t i_offset;
>>> -    int32_t next_offset;
>>> -    CPND_CKPT_CLIENT_NODE *cl_node = NULL;
>>> -    CPND_CKPT_NODE *cp_node = NULL;
>>> -    CKPT_INFO cp_info, tmp_cp_info;
>>> -    SaCkptHandleT client_hdl;
>>> -    char *buf = NULL;
>>> -    memset(&cp_info, '\0', sizeof(CKPT_INFO));
>>> -    NCS_OS_POSIX_SHM_REQ_INFO ckpt_rep_open;
>>> -    SaTimeT presentTime, timeout = 0;
>>> -    int64_t now, diff_time, giga_sec;
>>> -    SaTimeT tmpTime = 0;
>>> +static uint32_t cpnd_extended_name_lend(SaConstStringT value, SaNameT*
>> name)
>>> +{
>>> +    size_t length = strlen(value);
>>> +    TRACE("LENGTH=%x", (int)length);
>>> +    if (length <= SA_MAX_UNEXTENDED_NAME_LENGTH) {
>>> +        osaf_extended_name_lend(value, name);
>>> +        return NCSCC_RC_SUCCESS;
>>> +    }
>>>    -    TRACE_ENTER();
>>> -
>>> -    /* TO READ THE NUMBER OF CHECKPOINTS FROM THE HEADER */
>>> -    while (counter < MAX_CKPTS) {
>>> -        memset(&cp_info, '\0', sizeof(CKPT_INFO));
>>> -        if ((counter * sizeof(CKPT_INFO)) > UINTMAX_MAX) {
>>> -            LOG_ER("cpnd ckpt shm create failed,exceeded the
>> write limits(UINT64_MAX) ");
>>> -        }
>>> -        i_offset = counter * sizeof(CKPT_INFO);
>>> -        m_CPND_CKPTINFO_READ(cp_info, ckpt_addr + sizeof(CKPT_HDR),
>> i_offset);
>>> -
>>> -        if (cp_info.is_valid == 0) {
>>> -            counter++;
>>> +    /* Find memory slot for ckpt_name */
>>> +    CPND_CB *cb = ncshm_take_hdl(NCS_SERVICE_ID_CPND,
>> m_CPND_GET_CB_HDL);
>>> +    TRACE("cb=%p, extended_info=%p", cb, cb->shm_addr.extended_addr);
>>> +    CKPT_EXTENDED_INFO *extended_info = cb->shm_addr.extended_addr;
>>> +    if (!extended_info) {
>>> +        /* Logically there is no way for this */
>>> +        return NCSCC_RC_FAILURE;
>>> +    }
>>> +    int position = 0;
>>> +    while (position < MAX_CKPTS) {
>>> +        if (extended_info->is_valid == 1) {
>>> +            ++position;
>>>                continue;
>>>            }
>>> -        if (cp_info.is_first) {
>>> -            cp_node = m_MMGR_ALLOC_CPND_CKPT_NODE;
>>> -            if (cp_node == NULL) {
>>> -                LOG_ER("cpnd ckpt node memory allocation
>> failed");
>>> -                TRACE_LEAVE();
>>> -                return SA_AIS_ERR_NO_MEMORY;
>>> -            }
>>> -
>>> -            memset(cp_node, '\0', sizeof(CPND_CKPT_NODE));
>>> -            cp_node->ckpt_name = strdup(cp_info.ckpt_name);
>>> -            cp_node->ckpt_id = cp_info.ckpt_id;
>>> -            cp_node->offset = cp_info.offset;
>>> -            cp_node->is_close = cp_info.is_close;
>>> -            cp_node->is_unlink = cp_info.is_unlink;
>>> -            cp_node->close_time = cp_info.close_time;
>>> -            cp_node->cpnd_rep_create = cp_info.cpnd_rep_create;
>>> - cpnd_ckpt_sec_map_init(&cp_node->replica_info);
>>> -
>>> -            /* Non-collocated Differentiator flag */
>>> -            if (cp_info.cpnd_rep_create) {
>>> -                /* OPEN THE SHARED MEMORY ALREADY CREATED
>> FOR CHECKPOINT REPLICA */
>>> -                /* size=cp_node->ckpt_name.length; */
>>> -                buf =
>> m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH);
>>> -                memset(buf, '\0',
>> CPND_MAX_REPLICA_NAME_LENGTH);
>>> -                strncpy(buf, cp_node->ckpt_name,
>> CPND_REP_NAME_MAX_CKPT_NAME_LENGTH);
>>> -                sprintf(buf + strlen(buf) - 1, "_%u_%llu",
>> (uint32_t)nodeid, cp_node->ckpt_id);
>>> -                rc =
>> cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info,
>> cb->shm_alloc_guaranteed);
>>> -                if (rc != NCSCC_RC_SUCCESS) {
>>> -                    /*   assert(0); */
>>> -                    TRACE_4("cpnd ckpt replica create
>> failed with return value %d",rc);
>>> -
>>> -                    counter++;
>>> -                    continue;
>>> -                }
>>> -                cb->num_rep++;
>>> -            }
>>> -            if (cp_node->is_unlink) {
>>> -                free((void *)cp_node->ckpt_name);
>>> -                cp_node->ckpt_name = strdup("");
>>> -            }
>>> -
>>> -            memset(&tmp_cp_info, '\0', sizeof(CKPT_INFO));
>>> -            memcpy(&tmp_cp_info, &cp_info, sizeof(CKPT_INFO));
>>> -            next_offset = cp_info.offset;
>>> -            while (next_offset >= 0) {
>>> -                num_bitset =
>> client_bitmap_isset(tmp_cp_info.client_bitmap);    /* To check which 
>> clients
>> opened this checkpoint */
>>> - cp_node->ckpt_lcl_ref_cnt =
>> cp_node->ckpt_lcl_ref_cnt + num_bitset;
>>> -                bit_position = 0;
>>> -                for (count = 1; count <= num_bitset;
>> count++) {
>>> -                    client_hdl =
>> cpnd_client_extract_bits(tmp_cp_info.client_bitmap, 
>> &bit_position);    /*
>> This will return the client which opened this checkpoint */
>>> -                    TRACE_1("cpnd client handle
>> extracted ");
>>> -                    client_hdl = (tmp_cp_info.bm_offset
>> * 32) + client_hdl;
>>> - cpnd_client_node_get(cb, client_hdl,
>> &cl_node);    /* already in the above do-while , we added client node to
>> client tree */
>>> -                    if (cl_node == NULL) {
>>> -                        /* this should not have
>> happened , quit */
>>> -                        /*  assert(0); */
>>> -                        TRACE_4("cpnd client node
>> get failed client hdl: %llx",client_hdl);
>>> -                        continue;
>>> -                        /* goto end; */
>>> -                    }
>>> -                    cpnd_ckpt_client_add(cp_node,
>> cl_node);
>>> -                }
>>> -                next_offset = tmp_cp_info.next;
>>> -                if (next_offset >= 0) {
>>> -                    if ((next_offset *
>> sizeof(CKPT_INFO)) > UINTMAX_MAX) {
>>> -                        LOG_ER("cpnd ckpt shm create
>> failed,exceeded the write limits(UINT64_MAX) ");
>>> -                    }
>>> -                    memset(&tmp_cp_info, '\0',
>> sizeof(CKPT_INFO));
>>> -                    i_offset = next_offset *
>> sizeof(CKPT_INFO);
>>> - m_CPND_CKPTINFO_READ(tmp_cp_info,
>> ckpt_addr + sizeof(CKPT_HDR), i_offset);
>>> -                }
>>> -
>>> -            }    /* End of clients processing for this
>> cp_node */
>>> -
>>> -            cpnd_ckpt_node_add(cb, cp_node);
>>> -
>>> -            if (cp_info.is_close) {
>>> -                /* start the timer if exists */
>>> -                now = m_GET_TIME_STAMP(tmpTime);
>>> -                giga_sec = 1000000000;
>>> -                diff_time = now - cp_node->close_time;
>>> -                /*
>> if((cp_node->create_attrib.retentionDuration) >
>> (SA_TIME_ONE_SECOND*(presentTime - cp_node->close_time))) */
>>> -                if
>> ((cp_node->create_attrib.retentionDuration) > (giga_sec * diff_time)) {
>>> -                    /*  timeout =
>> cp_node->create_attrib.retentionDuration - 
>> (SA_TIME_ONE_SECOND*(presentTime
>> - cp_node->close_time)); */
>>> -                    timeout =
>>> -
>> cp_node->create_attrib.retentionDuration - (giga_sec * diff_time);
>>> -                    timeout =
>> m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(timeout);
>>> -                }
>>> -                if (timeout) {
>>> -                    /* for restart shared memory
>> updation */
>>> - m_GET_TIME_STAMP(presentTime);
>>> -                    cpnd_restart_update_timer(cb,
>> cp_node, presentTime);
>>> -                    if (!m_CPND_IS_COLLOCATED_ATTR_SET
>>> -
>> (cp_node->create_attrib.creationFlags)) {
>>> - cp_node->ret_tmr.type =
>> CPND_TMR_TYPE_NON_COLLOC_RETENTION;
>>> -                    } else {
>>> -                        cp_node->ret_tmr.type =
>> CPND_TMR_TYPE_RETENTION;
>>> -                    }
>>> -                    cp_node->ret_tmr.uarg =
>> cb->cpnd_cb_hdl_id;
>>> - cp_node->ret_tmr.ckpt_id =
>> cp_node->ckpt_id;
>>> - cpnd_tmr_start(&cp_node->ret_tmr,
>> timeout);
>>> -                } else {
>>> -                    if (!m_CPND_IS_COLLOCATED_ATTR_SET
>>> -
>> (cp_node->create_attrib.creationFlags)) {
>>> -
>> cpnd_proc_non_colloc_rt_expiry(cb, cp_node->ckpt_id);
>>> -                    } else {
>>> -                        cpnd_proc_rt_expiry(cb,
>> cp_node->ckpt_id);
>>> -                    }
>>> -                }
>>> -            }
>>> -
>>> -        }    /* End of one cp_node processing */
>>> -        counter++;
>>> -    }        /* End of while  after processing all 2000 ckpt
>> structs */
>>> -
>>> -    TRACE_LEAVE();
>>> -    return SA_AIS_OK;
>>> +        memset(&extended_info->ckpt_name, 0, kOsafMaxDnLength + 1);
>>> +        memcpy(&extended_info->ckpt_name, &value, length);
>>> +
>> osaf_extended_name_lend((SaConstStringT)(&extended_info->ckpt_name), 
>> name);
>>> +        extended_info->is_valid = 1;
>>> +        return NCSCC_RC_SUCCESS;
>>> +    }
>>> +    /* Logically there is no way for this */
>>> +    return NCSCC_RC_FAILURE;
>>>    }
>>>
>>
/***************************************************************************

>>
>> ******************
>>> - * Name           : cpnd_restore_client_info_v0
>>> + * Name           :  cpnd_extended_name_free
>>>     *
>>> - * Description    : To restore client information from share memory
>> version 0
>>> + * Description    : Free location for extended shared memory
>>>     *
>>>     * Arguments      : -
>>>     *
>>>     * Return Values  : -
>>>     *
>>>
>>
****************************************************************************

>>
>> ******************/
>>> -static uint32_t cpnd_restore_ckpt_info_v0(CPND_CB *cb, uint8_t
>> *ckpt_addr, SaClmNodeIdT nodeid)
>>> -{
>>> -    uint32_t counter = 0, count, num_bitset = 0, rc = 
>>> NCSCC_RC_SUCCESS,
>> bit_position;
>>> -    uint64_t i_offset;
>>> -    int32_t next_offset;
>>> -    CPND_CKPT_CLIENT_NODE *cl_node = NULL;
>>> -    CPND_CKPT_NODE *cp_node = NULL;
>>> -    CKPT_INFO_V0 cp_info_v0, tmp_cp_info_v0;
>>> -    CKPT_INFO cp_info;
>>> -    SaCkptHandleT client_hdl;
>>> -    char *buf = NULL;
>>> -    memset(&cp_info_v0, '\0', sizeof(CKPT_INFO_V0));
>>> -    NCS_OS_POSIX_SHM_REQ_INFO ckpt_rep_open;
>>> -    SaTimeT presentTime, timeout = 0;
>>> -    int64_t now, diff_time, giga_sec;
>>> -    SaTimeT tmpTime = 0;
>>> -
>>> -    TRACE_ENTER();
>>> -
>>> -    /* TO READ THE NUMBER OF CHECKPOINTS FROM THE HEADER */
>>> -    while (counter < MAX_CKPTS) {
>>> -        memset(&cp_info_v0, '\0', sizeof(CKPT_INFO_V0));
>>> -        if ((counter * sizeof(CKPT_INFO_V0)) > UINTMAX_MAX) {
>>> -            LOG_ER("cpnd ckpt shm create failed,exceeded the
>> write limits(UINT64_MAX) ");
>>> -        }
>>> -        i_offset = counter * sizeof(CKPT_INFO_V0);
>>> -        m_CPND_CKPTINFO_V0_READ(cp_info_v0, ckpt_addr +
>> sizeof(CKPT_HDR), i_offset);
>>> -
>>> -        if (cp_info_v0.is_valid == 0) {
>>> -            counter++;
>>> -            continue;
>>> -        }
>>> -        if (cp_info_v0.is_first) {
>>> -            cp_node = m_MMGR_ALLOC_CPND_CKPT_NODE;
>>> -            if (cp_node == NULL) {
>>> -                LOG_ER("cpnd ckpt node memory allocation
>> failed");
>>> -                TRACE_LEAVE();
>>> -                return SA_AIS_ERR_NO_MEMORY;
>>> -            }
>>> -
>>> -            memset(cp_node, '\0', sizeof(CPND_CKPT_NODE));
>>> -            cp_node->ckpt_name =
>> strdup(osaf_extended_name_borrow(&cp_info_v0.ckpt_name));
>>> -            cp_node->ckpt_id = cp_info_v0.ckpt_id;
>>> -            cp_node->offset = SHM_INIT;
>>> -            cp_node->is_close = cp_info_v0.is_close;
>>> -            cp_node->is_unlink = cp_info_v0.is_unlink;
>>> -            cp_node->close_time = cp_info_v0.close_time;
>>> -            cp_node->cpnd_rep_create =
>> cp_info_v0.cpnd_rep_create;
>>> - cpnd_ckpt_sec_map_init(&cp_node->replica_info);
>>> -
>>> -            /* Non-collocated Differentiator flag */
>>> -            if (cp_info_v0.cpnd_rep_create) {
>>> -                /* OPEN THE SHARED MEMORY ALREADY CREATED
>> FOR CHECKPOINT REPLICA */
>>> -                /* size=cp_node->ckpt_name.length; */
>>> -                buf =
>> m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH);
>>> -                memset(buf, '\0',
>> CPND_MAX_REPLICA_NAME_LENGTH);
>>> -                strncpy(buf, cp_node->ckpt_name,
>> CPND_REP_NAME_MAX_CKPT_NAME_LENGTH);
>>> -                sprintf(buf + strlen(buf) - 1, "_%u_%llu",
>> (uint32_t)nodeid, cp_node->ckpt_id);
>>> - cpnd_convert_cp_info_v0(&cp_info_v0,
>> &cp_info);
>>> -                rc =
>> cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info,
>> cb->shm_alloc_guaranteed);
>>> -                if (rc != NCSCC_RC_SUCCESS) {
>>> -                    /*   assert(0); */
>>> -                    TRACE_4("cpnd ckpt replica create
>> failed with return value %d",rc);
>>> -
>>> -                    counter++;
>>> -                    continue;
>>> -                }
>>> -                cb->num_rep++;
>>> -            }
>>> -            if (cp_node->is_unlink) {
>>> -                free((void *)cp_node->ckpt_name);
>>> -                cp_node->ckpt_name = strdup("");
>>> -            }
>>> -
>>> -            memset(&tmp_cp_info_v0, '\0', sizeof(CKPT_INFO_V0));
>>> -            memcpy(&tmp_cp_info_v0, &cp_info_v0,
>> sizeof(CKPT_INFO_V0));
>>> -            next_offset = cp_info_v0.offset;
>>> -            while (next_offset >= 0) {
>>> -                num_bitset =
>> client_bitmap_isset(tmp_cp_info_v0.client_bitmap);    /* To check which
>> clients opened this checkpoint */
>>> - cp_node->ckpt_lcl_ref_cnt =
>> cp_node->ckpt_lcl_ref_cnt + num_bitset;
>>> -                bit_position = 0;
>>> -                for (count = 1; count <= num_bitset;
>> count++) {
>>> -                    client_hdl =
>> cpnd_client_extract_bits(tmp_cp_info_v0.client_bitmap, 
>> &bit_position);    /*
>> This will return the client which opened this checkpoint */
>>> -                    TRACE_1("cpnd client handle
>> extracted ");
>>> -                    client_hdl =
>> (tmp_cp_info_v0.bm_offset * 32) + client_hdl;
>>> - cpnd_client_node_get(cb, client_hdl,
>> &cl_node);    /* already in the above do-while , we added client node to
>> client tree */
>>> -                    if (cl_node == NULL) {
>>> -                        /* this should not have
>> happened , quit */
>>> -                        /*  assert(0); */
>>> -                        TRACE_4("cpnd client node
>> get failed client hdl: %llx",client_hdl);
>>> -                        continue;
>>> -                        /* goto end; */
>>> -                    }
>>> -                    cpnd_ckpt_client_add(cp_node,
>> cl_node);
>>> -                }
>>> -                next_offset = tmp_cp_info_v0.next;
>>> -                if (next_offset >= 0) {
>>> -                    if ((next_offset *
>> sizeof(CKPT_INFO_V0)) > UINTMAX_MAX) {
>>> -                        LOG_ER("cpnd ckpt shm create
>> failed,exceeded the write limits(UINT64_MAX) ");
>>> -                    }
>>> -                    memset(&tmp_cp_info_v0, '\0',
>> sizeof(CKPT_INFO_V0));
>>> -                    i_offset = next_offset *
>> sizeof(CKPT_INFO_V0);
>>> -
>> m_CPND_CKPTINFO_V0_READ(tmp_cp_info_v0, ckpt_addr + sizeof(CKPT_HDR),
>> i_offset);
>>> -                }
>>> -
>>> -            }    /* End of clients processing for this
>> cp_node */
>>> -
>>> -            cpnd_ckpt_node_add(cb, cp_node);
>>> -
>>> -            if (cp_info_v0.is_close) {
>>> -                /* start the timer if exists */
>>> -                now = m_GET_TIME_STAMP(tmpTime);
>>> -                giga_sec = 1000000000;
>>> -                diff_time = now - cp_node->close_time;
>>> -                /*
>> if((cp_node->create_attrib.retentionDuration) >
>> (SA_TIME_ONE_SECOND*(presentTime - cp_node->close_time))) */
>>> -                if
>> ((cp_node->create_attrib.retentionDuration) > (giga_sec * diff_time)) {
>>> -                    /*  timeout =
>> cp_node->create_attrib.retentionDuration - 
>> (SA_TIME_ONE_SECOND*(presentTime
>> - cp_node->close_time)); */
>>> -                    timeout =
>>> -
>> cp_node->create_attrib.retentionDuration - (giga_sec * diff_time);
>>> -                    timeout =
>> m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(timeout);
>>> -                }
>>> -                if (timeout) {
>>> -                    /* for restart shared memory
>> updation */
>>> - m_GET_TIME_STAMP(presentTime);
>>> -                    cpnd_restart_update_timer(cb,
>> cp_node, presentTime);
>>> -                    if (!m_CPND_IS_COLLOCATED_ATTR_SET
>>> -
>> (cp_node->create_attrib.creationFlags)) {
>>> - cp_node->ret_tmr.type =
>> CPND_TMR_TYPE_NON_COLLOC_RETENTION;
>>> -                    } else {
>>> -                        cp_node->ret_tmr.type =
>> CPND_TMR_TYPE_RETENTION;
>>> -                    }
>>> -                    cp_node->ret_tmr.uarg =
>> cb->cpnd_cb_hdl_id;
>>> - cp_node->ret_tmr.ckpt_id =
>> cp_node->ckpt_id;
>>> - cpnd_tmr_start(&cp_node->ret_tmr,
>> timeout);
>>> -                } else {
>>> -                    if (!m_CPND_IS_COLLOCATED_ATTR_SET
>>> -
>> (cp_node->create_attrib.creationFlags)) {
>>> -
>> cpnd_proc_non_colloc_rt_expiry(cb, cp_node->ckpt_id);
>>> -                    } else {
>>> -                        cpnd_proc_rt_expiry(cb,
>> cp_node->ckpt_id);
>>> -                    }
>>> -                }
>>> -            }
>>> -
>>> -        }    /* End of one cp_node processing */
>>> -        counter++;
>>> -    }        /* End of while  after processing all 2000 ckpt
>> structs */
>>> -
>>> -    TRACE_LEAVE();
>>> -    return SA_AIS_OK;
>>> -}
>>> -
>>>
>>
-/**************************************************************************

>>
>> *******************
>>> - * Name           : cpnd_convert_cp_info_v0
>>> - *
>>> - * Description    : To convert a struct CKTP_INFO_V0 to CKPT_INFO
>>> - *
>>> - * Arguments      : -
>>> - *
>>> - * Return Values  : -
>>> - *
>>> -
>>
****************************************************************************

>>
>> ******************/
>>> -static void cpnd_convert_cp_info_v0(CKPT_INFO_V0 *cp_info_v0, 
>>> CKPT_INFO
>> *cp_info)
>>> +static void cpnd_extended_name_free(const SaNameT* name)
>>>    {
>>> -    memset(cp_info, 0, sizeof(CKPT_INFO));
>>> -
>>> -    strncpy(cp_info->ckpt_name,
>> osaf_extended_name_borrow(&cp_info_v0->ckpt_name), kOsafMaxDnLength);
>>> -    cp_info->ckpt_id = cp_info_v0->ckpt_id;
>>> -    cp_info->maxSections = cp_info_v0->maxSections;
>>> -    cp_info->maxSecSize = cp_info_v0->maxSecSize;
>>> -    cp_info->node_id = cp_info_v0->node_id;
>>> -    cp_info->offset = SHM_INIT;
>>> -    cp_info->client_bitmap = cp_info_v0->client_bitmap;
>>> -    cp_info->is_valid = cp_info_v0->is_valid;
>>> -    cp_info->bm_offset = cp_info_v0->bm_offset;
>>> -    cp_info->is_unlink = cp_info_v0->is_unlink;
>>> -    cp_info->is_close = cp_info_v0->is_close;
>>> -    cp_info->cpnd_rep_create = cp_info_v0->cpnd_rep_create;
>>> -    cp_info->is_first = cp_info_v0->is_first;
>>> -    cp_info->close_time = cp_info_v0->close_time;
>>> -    cp_info->next = cp_info_v0->next;
>>> +    size_t length = osaf_extended_name_length(name);
>>> +    if (length <= SA_MAX_UNEXTENDED_NAME_LENGTH) {
>>> +        return;
>>> +    }
>>> +    SaConstStringT ckpt_name = osaf_extended_name_borrow(name);
>>> +    /* Reset valid flag for future use */
>>> +    ((CKPT_EXTENDED_INFO *)ckpt_name)->is_valid = 0;
>>>    }
>>>
>>
/***************************************************************************

>>
>> ******************
>>> @@ -1787,7 +1672,7 @@ static void cpnd_convert_cp_info_v0(CKPT
>>>     * Return Values  : -
>>>     *
>>>
>>
****************************************************************************

>>
>> ******************/
>>> -static void 
>>> cpnd_destroy_shm_cpnd_cp_info(NCS_OS_POSIX_SHM_REQ_OPEN_INFO
>> *open_req)
>>> +static void cpnd_destroy_shm(NCS_OS_POSIX_SHM_REQ_OPEN_INFO *open_req)
>>>    {
>>>        NCS_OS_POSIX_SHM_REQ_INFO shm_info;
>>>        uint32_t rc = NCSCC_RC_SUCCESS;
>>> @@ -1824,94 +1709,4 @@ static void cpnd_destroy_shm_cpnd_cp_inf
>>>        }
>>>           TRACE_LEAVE();
>>> -}
>>> -
>>>
>>
-/**************************************************************************

>>
>> *******************
>>> - * Name           : cpnd_create_shm_cpnd_cp_info
>>> - *
>>> - * Description    : To destroy the shared memory CPND_CHECKPOINT_INFO
>>> - *
>>> - * Arguments      : -
>>> - *
>>> - * Return Values  : -
>>> - *
>>> -
>>
****************************************************************************

>>
>> ******************/
>>> -static void *cpnd_create_shm_cpnd_cp_info(NCS_OS_POSIX_SHM_REQ_INFO
>> *req_info)
>>> -{
>>> -    uint32_t rc = NCSCC_RC_SUCCESS;
>>> -    CPND_SHM_VERSION cpnd_shm_version;
>>> -
>>> -    TRACE_ENTER();
>>> -    /* Initializing shared memory version */
>>> -    memset(&cpnd_shm_version, '\0', sizeof(cpnd_shm_version));
>>> -    cpnd_shm_version.shm_version = CPSV_CPND_SHM_VERSION;
>>> -
>>> -    /* Create the shared memory */
>>> -    req_info->info.open.i_flags = O_CREAT | O_RDWR;
>>> -    rc = ncs_os_posix_shm(req_info);
>>> -    if (NCSCC_RC_FAILURE == rc) {
>>> -        LOG_ER("cpnd create shm_cpnd_cp_info fail for RDWR mode");
>>> -        return NULL;
>>> -    }
>>> -
>>> -    /* Initialize memory and set version */
>>> -    memset(req_info->info.open.o_addr, 0,
>>> -           sizeof(CLIENT_HDR) + (MAX_CLIENTS * sizeof(CLIENT_INFO)) +
>> sizeof(CKPT_HDR) +
>>> -           (MAX_CKPTS * sizeof(CKPT_INFO)));
>>> -    memcpy(req_info->info.open.o_addr, &cpnd_shm_version,
>> sizeof(cpnd_shm_version));
>>> -
>>> -    TRACE_LEAVE();
>>> -    return req_info->info.open.o_addr;
>>> -}
>>> -
>>>
>>
-/**************************************************************************

>>
>> *******************
>>> - * Name           : cpnd_update_shm_cpnd_cp_info
>>> - *
>>> - * Description    : To update the shared memory 
>>> CPND_CHECKPOINT_INFO when
>> for new version
>>> - *
>>> - * Arguments      : -
>>> - *
>>> - * Return Values  : -
>>> - *
>>> -
>>
****************************************************************************

>>
>> ******************/
>>> -static void cpnd_update_shm_cpnd_cp_info(CPND_CB *cb)
>>> -{
>>> -    CPND_CKPT_CLIENT_NODE *cl_node = NULL;
>>> -    CPND_CKPT_NODE *ckpt_node = NULL;
>>> -    SaCkptHandleT prev_ckpt_hdl;
>>> -
>>> -    TRACE_ENTER();
>>> -
>>> -    /* go through the client tree, to update shared memory */
>>> -    cpnd_client_node_getnext(cb, 0, &cl_node);
>>> -    while (cl_node) {
>>> -        int32_t cl_offset;
>>> -        prev_ckpt_hdl = cl_node->ckpt_app_hdl;
>>> -
>>> -        cl_offset = cpnd_restart_shm_client_update(cb, cl_node);
>>> -        /* -1 shared memory is full &&& -2 - shared memory read
>> failed */
>>> -        if (cl_offset == -1 || cl_offset == -2) {
>>> -            TRACE_4("cpnd client info update failed
>> %d",cl_offset);
>>> -        }
>>> -
>>> -        cpnd_client_node_getnext(cb, prev_ckpt_hdl, &cl_node);
>>> -    }
>>> -
>>> -    /* go through the ckpt_node tree, to update shared memory */
>>> -    cpnd_ckpt_node_getnext(cb, 0, &ckpt_node);
>>> -    while (ckpt_node != NULL) {
>>> -        SaCkptCheckpointHandleT prev_ckpt_id;
>>> -        CPND_CKPT_CLLIST_NODE *ckpt_client_list = NULL;
>>> -
>>> -        ckpt_client_list = ckpt_node->clist;
>>> -        while (ckpt_client_list != NULL) {
>>> -            cpnd_restart_shm_ckpt_update(cb, ckpt_node,
>> ckpt_client_list->cnode->ckpt_app_hdl);
>>> -            ckpt_client_list = ckpt_client_list->next;
>>> -        }
>>> -
>>> -        prev_ckpt_id = ckpt_node->ckpt_id;
>>> -        cpnd_ckpt_node_getnext(cb, prev_ckpt_id, &ckpt_node);
>>> -    }
>>> -
>>> -    TRACE_LEAVE();
>>> -}
>>> +}
>>> \ No newline at end of file
>>>
>>
>



------------------------------------------------------------------------------
The Command Line: Reinvented for Modern Developers
Did the resurgence of CLI tooling catch you by surprise?
Reconnect with the command line and become more productive. 
Learn the new .NET and ASP.NET CLI. Get your free copy!
http://sdm.link/telerik
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to