Hi!

I was able to reproduce the problem and without your patch it happens 
every time. With your patch it seems to work most of the time, but 
sometimes I get a crash in the node director:

#0  _int_malloc (av=0x40c95760 <main_arena>, bytes=21) at malloc.c:3388
#1  0x00000000409597b0 in __GI___libc_malloc (bytes=21) at malloc.c:2891
#2  0x000000004000630e in open_path (name=name@entry=0x40a535be 
"libgcc_s.so.1", namelen=namelen@entry=14, secure=secure@entry=0,
     sps=sps@entry=0x40222e40 <env_path_list>, 
realname=realname@entry=0x7fbfe91368, fbp=fbp@entry=0x7fbfe91378, 
loader=0x40025588,
     whatcode=whatcode@entry=2, 
found_other_class=found_other_class@entry=0x7fbfe91360) at dl-load.c:2271
#3  0x0000000040008f1a in _dl_map_object 
(loader=loader@entry=0x40025588, name=name@entry=0x40a535be 
"libgcc_s.so.1", type=type@entry=2,
     trace_mode=trace_mode@entry=0, mode=mode@entry=-1879048191, 
nsid=<optimized out>) at dl-load.c:2447
#4  0x0000000040014a54 in dl_open_worker (a=a@entry=0x7fbfe918f8) at 
dl-open.c:235
#5  0x000000004000fff4 in _dl_catch_error 
(objname=objname@entry=0x7fbfe918e8, 
errstring=errstring@entry=0x7fbfe918f0,
     mallocedp=mallocedp@entry=0x7fbfe918e0, 
operate=operate@entry=0x400149a0 <dl_open_worker>, 
args=args@entry=0x7fbfe918f8)
     at dl-error.c:187
#6  0x00000000400143bb in _dl_open (file=0x40a535be "libgcc_s.so.1", 
mode=-2147483647, caller_dlopen=<optimized out>, nsid=-2, argc=2,
     argv=0x7fbfe92ad8, env=0x7fbfe92af0) at dl-open.c:661
#7  0x0000000040a0d0f2 in do_dlopen (ptr=ptr@entry=0x7fbfe91b10) at 
dl-libc.c:87
#8  0x000000004000fff4 in _dl_catch_error (objname=0x7fbfe91af0, 
errstring=0x7fbfe91b00, mallocedp=0x7fbfe91ae0,
     operate=0x40a0d0b0 <do_dlopen>, args=0x7fbfe91b10) at dl-error.c:187
#9  0x0000000040a0d1b2 in dlerror_run (args=0x7fbfe91b10, 
operate=0x40a0d0b0 <do_dlopen>) at dl-libc.c:46
#10 __GI___libc_dlopen_mode (name=name@entry=0x40a535be "libgcc_s.so.1", 
mode=mode@entry=-2147483647) at dl-libc.c:163
#11 0x00000000409e1d55 in init () at ../sysdeps/x86_64/backtrace.c:52
#12 0x00000000404aca90 in pthread_once () at 
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S:103
#13 0x00000000409e1e6c in __GI___backtrace (array=<optimized out>, 
size=20) at ../sysdeps/x86_64/backtrace.c:103
#14 0x000000004023e50b in fatal_signal_handler (sig=6, 
siginfo=0x7fbfe91df0, ctx=<optimized out>) at daemon.c:491
#15 <signal handler called>
#16 0x000000004090dcc9 in __GI_raise (sig=sig@entry=6) at 
../nptl/sysdeps/unix/sysv/linux/raise.c:56
#17 0x00000000409110d8 in __GI_abort () at abort.c:89
#18 0x000000004094a394 in __libc_message (do_abort=do_abort@entry=1, 
fmt=fmt@entry=0x40a58b28 "*** Error in `%s': %s: 0x%s ***\n")
     at ../sysdeps/posix/libc_fatal.c:175
#19 0x000000004095666e in malloc_printerr (ptr=<optimized out>, 
str=0x40a58c58 "double free or corruption (out)", action=1)
     at malloc.c:4996
#20 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at 
malloc.c:3840
#21 0x000000000040def4 in glnd_resource_lock_req_delete 
(res_info=res_info@entry=0x6436a0, lck_list_info=0x6434e0) at glnd_res.c:506
#22 0x00000000004053fd in glnd_client_node_resource_del 
(glnd_cb=glnd_cb@entry=0x641ba0, client_info=client_info@entry=0x643450,
     res_info=res_info@entry=0x6436a0) at glnd_client.c:316
#23 0x0000000000405539 in glnd_client_node_del 
(glnd_cb=glnd_cb@entry=0x641ba0, client_info=0x643450) at glnd_client.c:162
#24 0x000000000040253f in glnd_agent_node_del (glnd_cb=0x641ba0, 
agent_info=0x643410) at glnd_agent.c:131
#25 0x0000000000406193 in glnd_process_gla_unreg_agent 
(glnd_cb=<optimized out>, evt=0x44001a80) at glnd_evt.c:420
#26 0x000000000040a9e4 in glnd_process_evt (cb=cb@entry=0x641ba0, 
evt=evt@entry=0x44001a80) at glnd_evt.c:358
#27 0x0000000000402eb5 in glnd_process_mbx (cb=0x641ba0, 
mbx=mbx@entry=0x641bd8) at glnd_api.c:164
#28 0x00000000004030ea in glnd_main_process (mbx=mbx@entry=0x641bd8) at 
glnd_api.c:254
#29 0x0000000000402254 in main (argc=<optimized out>, argv=<optimized 
out>) at glnd_main.c:73

Do you think this could be caused by a change you have made, or is it a 
completely separate bug?

Another question: is this solution in-service upgradeable?

regards,
Anders Widell

On 12/01/2015 05:10 PM, Alex Jones wrote:
>   osaf/libs/common/glsv/glsv_edu.c         |   3 +
>   osaf/libs/common/glsv/include/glnd_evt.h |   2 +
>   osaf/libs/common/glsv/include/glnd_res.h |   8 ++-
>   osaf/services/saf/glsv/glnd/glnd_cb.c    |  12 ++--
>   osaf/services/saf/glsv/glnd/glnd_evt.c   |   9 +++-
>   osaf/services/saf/glsv/glnd/glnd_res.c   |  66 
> ++++++++++++++++++++++++++-----
>   6 files changed, 78 insertions(+), 22 deletions(-)
>
>
> Exclusive locks which are held when the master nd reboots can never be
> unlocked, and pending exclusive locks which are held when the master nd
> reboots can never be given out.
>
> When the master nd reboots and a new master nd is elected, the other nds
> which have locks in use resend the lock information to the new master. But,
> not all information needed by the new master is sent. "lcl_resource_id" and
> "lcl_lockid" are not sent. So, when the new master sends an unlock response
> to an nd which was in the middle of unlocking with the old master, the nd is
> unable to find the local lock because the master didn't send all the right
> data. Same when the new master send a lock response to an nd with a pending
> lock.
>
> The solution is in three parts. (1) lcl_lockid was not being put into the
> GLSV_LOCK_REQ_INFO message by MDS, even though it was part of the message
> structure. This is now done. (2) add lcl_resource_id to the
> GLSV_EVT_GLND_RSC_INFO message so that the new master nd can properly set up
> the lock queues. And (3) unlock requests sent to the master nd which has been
> rebooted, need to be handled by the new master nd, and unlock responses sent
>
> diff --git a/osaf/libs/common/glsv/glsv_edu.c 
> b/osaf/libs/common/glsv/glsv_edu.c
> --- a/osaf/libs/common/glsv/glsv_edu.c
> +++ b/osaf/libs/common/glsv/glsv_edu.c
> @@ -629,6 +629,8 @@ static uint32_t glsv_edp_glnd_evt_glnd_r
>       EDU_INST_SET glsv_glnd_create_rules[] = {
>               {EDU_START, glsv_edp_glnd_evt_glnd_rsc_info, 0, 0, 0, 
> sizeof(GLSV_EVT_GLND_RSC_INFO), 0, NULL},
>               {EDU_EXEC, ncs_edp_uns32, 0, 0, 0, 
> (long)&((GLSV_EVT_GLND_RSC_INFO *)0)->resource_id, 0, NULL},
> +             {EDU_EXEC, ncs_edp_uns32, 0, 0, 0, 
> (long)&((GLSV_EVT_GLND_RSC_INFO *)0)->lcl_resource_id, 0, NULL},
> +             {EDU_EXEC, ncs_edp_ncs_bool, 0, 0, 0, 
> (long)&((GLSV_EVT_GLND_RSC_INFO *)0)->unlock_req_sent, 0, NULL},
>               {EDU_EXEC, ncs_edp_mds_dest, 0, 0, 0, 
> (long)&((GLSV_EVT_GLND_RSC_INFO *)0)->glnd_mds_dest, 0, NULL},
>               {EDU_EXEC, ncs_edp_uns32, 0, 0, 0, 
> (long)&((GLSV_EVT_GLND_RSC_INFO *)0)->num_requests, 0, NULL},
>               {EDU_EXEC, glsv_edp_glnd_lock_list_info, EDQ_POINTER, 0, 0,
> @@ -998,6 +1000,7 @@ static uint32_t glsv_edp_lock_req_info(E
>       EDU_INST_SET glsv_glnd_create_rules[] = {
>               {EDU_START, glsv_edp_lock_req_info, 0, 0, 0, 
> sizeof(GLSV_LOCK_REQ_INFO), 0, NULL},
>               {EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((GLSV_LOCK_REQ_INFO 
> *)0)->lockid, 0, NULL},
> +             {EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((GLSV_LOCK_REQ_INFO 
> *)0)->lcl_lockid, 0, NULL},
>               {EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((GLSV_LOCK_REQ_INFO 
> *)0)->handleId, 0, NULL},
>               {EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((GLSV_LOCK_REQ_INFO 
> *)0)->invocation, 0, NULL},
>               {EDU_EXEC, ncs_edp_uns32, 0, 0, 0, (long)&((GLSV_LOCK_REQ_INFO 
> *)0)->lock_type, 0, NULL},
> diff --git a/osaf/libs/common/glsv/include/glnd_evt.h 
> b/osaf/libs/common/glsv/include/glnd_evt.h
> --- a/osaf/libs/common/glsv/include/glnd_evt.h
> +++ b/osaf/libs/common/glsv/include/glnd_evt.h
> @@ -166,6 +166,8 @@ typedef struct glsv_evt_glnd_lck_info_ta
>   typedef struct glsv_evt_glnd_rsc_info_tag {
>       /* list of all rsc-lck info */
>       SaLckResourceIdT resource_id;
> +     SaLckResourceIdT lcl_resource_id;
> +     bool unlock_req_sent;
>       MDS_DEST glnd_mds_dest;
>       uint32_t num_requests;
>       GLND_LOCK_LIST_INFO *list_of_req;
> diff --git a/osaf/libs/common/glsv/include/glnd_res.h 
> b/osaf/libs/common/glsv/include/glnd_res.h
> --- a/osaf/libs/common/glsv/include/glnd_res.h
> +++ b/osaf/libs/common/glsv/include/glnd_res.h
> @@ -52,8 +52,7 @@ uint32_t glnd_resource_node_destroy(GLND
>   
>   GLND_RES_LOCK_LIST_INFO 
> *glnd_resource_grant_lock_req_find(GLND_RESOURCE_INFO *res_info,
>                                                                   
> GLSV_LOCK_REQ_INFO res_lock_info,
> -                                                                 MDS_DEST 
> req_mds_dest,
> -                                                                 
> SaLckResourceIdT lcl_resource_id);
> +                                                                 MDS_DEST 
> req_mds_dest, SaLckResourceIdT lcl_resource_id);
>   
>   GLND_RES_LOCK_LIST_INFO 
> *glnd_resource_pending_lock_req_find(GLND_RESOURCE_INFO *res_info,
>                                                                     
> GLSV_LOCK_REQ_INFO res_lock_info,
> @@ -112,7 +111,10 @@ void glnd_resource_resend_nonmaster_info
>   
>   void glnd_resource_master_process_resend_lock_req(GLND_CB *glnd_cb,
>                                                          GLND_RESOURCE_INFO 
> *res_node,
> -                                                        GLSV_LOCK_REQ_INFO 
> lock_info, MDS_DEST req_node_mds_id);
> +                                                        GLSV_LOCK_REQ_INFO 
> lock_info,
> +                                                        SaLckResourceIdT 
> lcl_resource_id,
> +                                                        bool unlock_req_sent,
> +                                                        MDS_DEST 
> req_node_mds_id);
>   
>   struct glsv_evt_glnd_dd_probe_info_tag;     /* forward declaration 
> required. */
>   
> diff --git a/osaf/services/saf/glsv/glnd/glnd_cb.c 
> b/osaf/services/saf/glsv/glnd/glnd_cb.c
> --- a/osaf/services/saf/glsv/glnd/glnd_cb.c
> +++ b/osaf/services/saf/glsv/glnd/glnd_cb.c
> @@ -364,25 +364,25 @@ void glnd_dump_cb()
>                       TRACE("Grant list : ");
>                       list = res_info->lck_master_info.grant_list;
>                       while (list) {
> -                             TRACE("Lock Id : %d   Node Id : %d  App Handle 
> : %d ",
> +                             TRACE("Lock Id : %d   Node Id : %d  App Handle 
> : %d  Lcl Resource Id: %u",
>                                     (uint32_t)list->lock_info.lockid, 
> m_NCS_NODE_ID_FROM_MDS_DEST(list->req_mdest_id),
> -                                   (uint32_t)list->lock_info.handleId);
> +                                   (uint32_t)list->lock_info.handleId, 
> list->lcl_resource_id);
>                               list = list->next;
>                       }
>                       TRACE("Wait Ex list : ");
>                       list = res_info->lck_master_info.wait_exclusive_list;
>                       while (list) {
> -                             TRACE("Lock Id : %d   Node Id : %d  App Handle 
> : %d ",
> +                             TRACE("Lock Id : %d   Node Id : %d  App Handle 
> : %d  Lcl Resource Id: %u",
>                                     (uint32_t)list->lock_info.lockid, 
> m_NCS_NODE_ID_FROM_MDS_DEST(list->req_mdest_id),
> -                                   (uint32_t)list->lock_info.handleId);
> +                                   (uint32_t)list->lock_info.handleId, 
> list->lcl_resource_id);
>                               list = list->next;
>                       }
>                       TRACE("Wait PR list : ");
>                       list = res_info->lck_master_info.wait_read_list;
>                       while (list) {
> -                             TRACE("Lock Id : %d   Node Id : %d  App Handle 
> : %d ",
> +                             TRACE("Lock Id : %d   Node Id : %d  App Handle 
> : %d  Lcl Resource Id: %u",
>                                     (uint32_t)list->lock_info.lockid, 
> m_NCS_NODE_ID_FROM_MDS_DEST(list->req_mdest_id),
> -                                   (uint32_t)list->lock_info.handleId);
> +                                   (uint32_t)list->lock_info.handleId, 
> list->lcl_resource_id);
>                               list = list->next;
>                       }
>               } else {
> diff --git a/osaf/services/saf/glsv/glnd/glnd_evt.c 
> b/osaf/services/saf/glsv/glnd/glnd_evt.c
> --- a/osaf/services/saf/glsv/glnd/glnd_evt.c
> +++ b/osaf/services/saf/glsv/glnd/glnd_evt.c
> @@ -2166,8 +2166,15 @@ static uint32_t glnd_process_glnd_send_r
>       for (lock_list = rsc_info->list_of_req; lock_list != NULL; lock_list = 
> lock_list->next) {
>               /* process each lock node info */
>               glnd_resource_master_process_resend_lock_req(glnd_cb, res_node,
> -                                                          
> lock_list->lock_info, rsc_info->glnd_mds_dest);
> +                                                          
> lock_list->lock_info,
> +                                                          
> rsc_info->lcl_resource_id,
> +                                                          
> rsc_info->unlock_req_sent,
> +                                                          
> rsc_info->glnd_mds_dest);
>       }
> +
> +     /* respond to any unanswered unlock requests */
> +     glnd_resource_check_lost_unlock_requests(glnd_cb, res_node);
> +
>       rc = NCSCC_RC_SUCCESS;
>   
>   end:
> diff --git a/osaf/services/saf/glsv/glnd/glnd_res.c 
> b/osaf/services/saf/glsv/glnd/glnd_res.c
> --- a/osaf/services/saf/glsv/glnd/glnd_res.c
> +++ b/osaf/services/saf/glsv/glnd/glnd_res.c
> @@ -346,14 +346,18 @@ GLND_RES_LOCK_LIST_INFO *glnd_resource_g
>                                                          MDS_DEST 
> req_mds_dest, SaLckResourceIdT lcl_resource_id)
>   {
>       GLND_RES_LOCK_LIST_INFO *lock_info;
> +     TRACE_ENTER();
>       for (lock_info = res_info->lck_master_info.grant_list; lock_info != 
> NULL; lock_info = lock_info->next) {
>   
> +             TRACE("handleId: %llu lcl_lockid: %llu lcl_resource_id: %u res 
> handleId: %llu res lcl_lockid: %llu res lcl_resource_id: %u req_mdest_id: %d 
> req_mds_dest: %d is local node: %i",
> +                             lock_info->lock_info.handleId, 
> lock_info->lock_info.lcl_lockid, lock_info->lcl_resource_id, 
> res_lock_info.handleId, res_lock_info.lcl_lockid, lcl_resource_id, 
> m_NCS_NODE_ID_FROM_MDS_DEST(lock_info->req_mdest_id), 
> m_NCS_NODE_ID_FROM_MDS_DEST(req_mds_dest), 
> m_GLND_IS_LOCAL_NODE(&lock_info->req_mdest_id, &req_mds_dest));
>               if (lock_info->lock_info.handleId == res_lock_info.handleId &&
>                   lock_info->lock_info.lcl_lockid == res_lock_info.lcl_lockid 
> &&
>                   lock_info->lcl_resource_id == lcl_resource_id &&
>                   m_GLND_IS_LOCAL_NODE(&lock_info->req_mdest_id, 
> &req_mds_dest) == 0)
>                       return lock_info;
>       }
> +     TRACE_LEAVE();
>       return NULL;
>   }
>   
> @@ -460,12 +464,16 @@ GLND_RES_LOCK_LIST_INFO *glnd_resource_l
>                                                          SaLckHandleT 
> handleId, SaLckResourceIdT lcl_resource_id)
>   {
>       GLND_RES_LOCK_LIST_INFO *lock_info;
> +     TRACE_ENTER();
>       for (lock_info = res_info->lcl_lck_req_info; lock_info != NULL; 
> lock_info = lock_info->next) {
>   
> +             TRACE("handleId: %llu lcl_lockid: %llu lcl_resource_id: %u res 
> handleId: %llu res lcl_lockid: %llu res lcl_resource_id: %u",
> +                             lock_info->lock_info.handleId, 
> lock_info->lock_info.lcl_lockid, lock_info->lcl_resource_id, handleId, 
> lockid, lcl_resource_id);
>               if (lock_info->lock_info.handleId == handleId &&
>                   lock_info->lock_info.lcl_lockid == lockid && 
> lock_info->lcl_resource_id == lcl_resource_id)
>                       return lock_info;
>       }
> +     TRACE_LEAVE();
>       return NULL;
>   }
>   
> @@ -1471,7 +1479,13 @@ void glnd_resource_convert_nonmaster_to_
>       uint32_t remaining_time = 0;
>       SaTimeT time;
>   
> +     TRACE_ENTER();
> +
>       for (lck_list_nm_info = res_node->lcl_lck_req_info; lck_list_nm_info != 
> NULL;) {
> +             TRACE("lockStatus: %d  Lock Id : %d   Node Id : %d  App Handle 
> : %d  Lcl Resource Id: %u",
> +                  lck_list_nm_info->lock_info.lockStatus,
> +                     (uint32_t)lck_list_nm_info->lock_info.lockid, 
> m_NCS_NODE_ID_FROM_MDS_DEST(lck_list_nm_info->req_mdest_id), 
> (uint32_t)lck_list_nm_info->lock_info.handleId, 
> lck_list_nm_info->lcl_resource_id);
> +
>               lck_list_m_info = lck_list_nm_info;
>               lck_list_nm_info = lck_list_nm_info->next;
>   
> @@ -1526,6 +1540,7 @@ void glnd_resource_convert_nonmaster_to_
>       }
>       res_node->lcl_lck_req_info = NULL;
>   
> +     TRACE_LEAVE();
>       return;
>   }
>   
> @@ -1546,8 +1561,12 @@ void glnd_resource_resend_nonmaster_info
>       GLND_RES_LOCK_LIST_INFO *lck_list_nm_info;
>       GLSV_GLND_EVT glnd_evt;
>       GLND_LOCK_LIST_INFO *lck_list_info = NULL, *new_list_info = NULL, 
> *tmp_list = NULL;
> +     SaLckResourceIdT lcl_resource_id = 0;
> +     bool unlock_req_sent = false;
>       uint32_t count = 0;
>   
> +     TRACE_ENTER();
> +
>       for (lck_list_nm_info = res_node->lcl_lck_req_info; lck_list_nm_info != 
> NULL;
>            lck_list_nm_info = lck_list_nm_info->next) {
>               /* prepare the lock list */
> @@ -1556,7 +1575,11 @@ void glnd_resource_resend_nonmaster_info
>                       LOG_CR("GLND lock list alloc failed: Error %s", 
> strerror(errno));
>                       goto err;
>               }
> +             lcl_resource_id = lck_list_nm_info->lcl_resource_id;
> +             unlock_req_sent = lck_list_nm_info->unlock_req_sent;
> +             TRACE("setting lcl_resource_id: %u unlock_req_sent: %i", 
> lcl_resource_id, unlock_req_sent);
>               new_list_info->lock_info = lck_list_nm_info->lock_info;
> +             TRACE("lcl_lckid: %llu", 
> lck_list_nm_info->lock_info.lcl_lockid);
>               /* add it to the list */
>               new_list_info->next = lck_list_info;
>               lck_list_info = new_list_info;
> @@ -1566,6 +1589,9 @@ void glnd_resource_resend_nonmaster_info
>       memset(&glnd_evt, 0, sizeof(GLSV_GLND_EVT));
>       glnd_evt.type = GLSV_GLND_EVT_SND_RSC_INFO;
>       glnd_evt.info.node_rsc_info.resource_id = res_node->resource_id;
> +     glnd_evt.info.node_rsc_info.lcl_resource_id = lcl_resource_id;
> +     glnd_evt.info.node_rsc_info.unlock_req_sent = unlock_req_sent;
> +     TRACE("sending lcl_resource_id: %u unlock_req_sent: %i", 
> lcl_resource_id, unlock_req_sent);
>       glnd_evt.info.node_rsc_info.num_requests = count;
>       glnd_evt.info.node_rsc_info.list_of_req = lck_list_info;
>       glnd_evt.info.node_rsc_info.glnd_mds_dest = glnd_cb->glnd_mdest_id;
> @@ -1578,6 +1604,7 @@ void glnd_resource_resend_nonmaster_info
>               lck_list_info = lck_list_info->next;
>               m_MMGR_FREE_GLSV_GLND_LOCK_LIST_INFO(tmp_list, 
> NCS_SERVICE_ID_GLND);
>       }
> +     TRACE_LEAVE();
>       return;
>    err:
>       while (lck_list_info) {
> @@ -1586,6 +1613,7 @@ void glnd_resource_resend_nonmaster_info
>               m_MMGR_FREE_GLND_LOCK_LIST_INFO(tmp_list);
>       }
>       assert(0);
> +     TRACE_LEAVE();
>       return;
>   }
>   
> @@ -1604,7 +1632,10 @@ void glnd_resource_resend_nonmaster_info
>   
> *****************************************************************************/
>   void glnd_resource_master_process_resend_lock_req(GLND_CB *glnd_cb,
>                                                 GLND_RESOURCE_INFO *res_node,
> -                                               GLSV_LOCK_REQ_INFO lock_info, 
> MDS_DEST req_node_mds_id)
> +                                               GLSV_LOCK_REQ_INFO lock_info,
> +                                               SaLckResourceIdT 
> lcl_resource_id,
> +                                               bool unlock_req_sent,
> +                                               MDS_DEST req_node_mds_id)
>   {
>       GLND_RES_LOCK_LIST_INFO *lck_list_info;
>   
> @@ -1613,6 +1644,8 @@ void glnd_resource_master_process_resend
>               LOG_CR("GLND Rsc lock list alloc failed: Error %s", 
> strerror(errno));
>               assert(0);
>       }
> +     TRACE_ENTER();
> +
>       memset(lck_list_info, 0, sizeof(GLND_RES_LOCK_LIST_INFO));
>   
>       lck_list_info->lck_info_hdl_id =
> @@ -1620,6 +1653,11 @@ void glnd_resource_master_process_resend
>       lck_list_info->lock_info = lock_info;
>       lck_list_info->req_mdest_id = req_node_mds_id;
>       lck_list_info->res_info = res_node;
> +     lck_list_info->lcl_resource_id = lcl_resource_id;
> +     lck_list_info->unlock_req_sent = unlock_req_sent;
> +     TRACE("lck_list_info->lcl_resource_id: %u 
> lck_list_info->unlock_req_sent: %i",
> +             lcl_resource_id,
> +             unlock_req_sent);
>   
>       /* check to see the status of the lock */
>       if (lock_info.lockStatus == SA_LCK_LOCK_GRANTED) {
> @@ -1642,6 +1680,7 @@ void glnd_resource_master_process_resend
>                       res_node->lck_master_info.wait_read_list->prev = 
> lck_list_info;
>               res_node->lck_master_info.wait_read_list = lck_list_info;
>       }
> +     TRACE_LEAVE();
>       return;
>   }
>   
> @@ -1783,11 +1822,12 @@ void glnd_resource_check_lost_unlock_req
>       GLND_RES_LOCK_LIST_INFO *lck_list_nm_info;
>       GLSV_GLND_EVT *glnd_evt;
>   
> +     TRACE_ENTER();
> +
>       for (lck_list_nm_info = res_node->lck_master_info.grant_list;
>            lck_list_nm_info != NULL; lck_list_nm_info = 
> lck_list_nm_info->next) {
>               /* check for unlock sent flag */
> -             if (m_GLND_IS_LOCAL_NODE(&lck_list_nm_info->req_mdest_id, 
> &glnd_cb->glnd_mdest_id) == 0 &&
> -                 lck_list_nm_info->unlock_req_sent == true) {
> +             if (lck_list_nm_info->unlock_req_sent == true) {
>                       /* generate the unlck rsp event */
>                       glnd_evt = m_MMGR_ALLOC_GLND_EVT;
>                       if (glnd_evt == NULL) {
> @@ -1796,17 +1836,19 @@ void glnd_resource_check_lost_unlock_req
>                       }
>                       memset(glnd_evt, 0, sizeof(GLSV_GLND_EVT));
>                       glnd_evt->glnd_hdl = glnd_cb->cb_hdl_id;
> -                     glnd_evt->type = GLSV_GLND_EVT_RSC_UNLOCK;
> -                     glnd_evt->info.rsc_unlock_info.agent_mds_dest = 
> lck_list_nm_info->lock_info.agent_mds_dest;
> -                     glnd_evt->info.rsc_unlock_info.call_type = 
> lck_list_nm_info->lock_info.call_type;
> -                     glnd_evt->info.rsc_unlock_info.client_handle_id = 
> lck_list_nm_info->lock_info.handleId;
> -                     glnd_evt->info.rsc_unlock_info.invocation = 
> lck_list_nm_info->lock_info.invocation;
> -                     glnd_evt->info.rsc_unlock_info.lockid = 
> lck_list_nm_info->lock_info.lockid;
> -                     glnd_evt->info.rsc_unlock_info.resource_id = 
> res_node->resource_id;
> -                     glnd_evt->info.rsc_unlock_info.timeout = 
> lck_list_nm_info->lock_info.timeout;
> -                     glnd_evt->mds_context = 
> lck_list_nm_info->glnd_res_lock_mds_ctxt;
> +                     glnd_evt->type = GLSV_GLND_EVT_UNLCK_REQ;
> +                     glnd_evt->info.node_lck_info.glnd_mds_dest = 
> lck_list_nm_info->req_mdest_id;
> +                     glnd_evt->info.node_lck_info.client_handle_id = 
> lck_list_nm_info->lock_info.handleId;
> +                     glnd_evt->info.node_lck_info.lockid = 
> lck_list_nm_info->lock_info.lockid;
> +                     glnd_evt->info.node_lck_info.lcl_lockid = 
> lck_list_nm_info->lock_info.lcl_lockid;
> +                     glnd_evt->info.node_lck_info.resource_id = 
> res_node->resource_id;
> +                     glnd_evt->info.node_lck_info.lcl_resource_id = 
> lck_list_nm_info->lcl_resource_id;
> +                     glnd_evt->info.node_lck_info.invocation = 
> lck_list_nm_info->lock_info.invocation;
>   
> +                     TRACE("answering lost unlock request");
>                       glnd_evt_local_send(glnd_cb, glnd_evt, 
> MDS_SEND_PRIORITY_MEDIUM);
>               }
>       }
> +
> +     TRACE_LEAVE();
>   }
>
>
> ------------------------------------------------------------------------------
> Go from Idea to Many App Stores Faster with Intel(R) XDK
> Give your users amazing mobile app experiences with Intel(R) XDK.
> Use one codebase in this all-in-one HTML5 development environment.
> Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
> http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
> _______________________________________________
> Opensaf-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://makebettercode.com/inteldaal-eval
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to