static void clMsgClientsTrackCallbackAsyncCallback_4_0_0(ClRcT rc, void *pIdlCookie, ClBufferHandleT inMsgHdl, ClBufferHandleT outMsgHdl)
{
    ClIdlCookieT* pCookie = (ClIdlCookieT*)pIdlCookie;
    ClRcT retVal = CL_OK;
    ClHandleT  clientHandle;
    SaNameT  pGroupName;
    SaMsgQueueGroupNotificationBufferT_4_0_0  pNotification;

    memset(&(clientHandle), 0, sizeof(ClHandleT));
    memset(&(pGroupName), 0, sizeof(SaNameT));
    memset(&(pNotification), 0, sizeof(SaMsgQueueGroupNotificationBufferT_4_0_0));


    retVal = clXdrUnmarshallClHandleT(inMsgHdl, &(clientHandle));
    if (CL_OK != retVal)
    {
        goto L0;
    }

    retVal = clXdrUnmarshallSaNameT(inMsgHdl, &(pGroupName));
    if (CL_OK != retVal)
    {
        goto L1;
    }

    retVal = clXdrUnmarshallSaMsgQueueGroupNotificationBufferT_4_0_0(inMsgHdl, &(pNotification));
    if (CL_OK != retVal)
    {
        goto L2;
    }

    if (rc != CL_OK)
    {
        retVal = rc;
    }

    ((MsgCltClMsgClientsTrackCallbackAsyncCallbackT_4_0_0)(pCookie->actualCallback))(pCookie->handle, clientHandle, &(pGroupName), &(pNotification), retVal, pCookie->pCookie);
    goto L3;

L3: 
L2: 
L1: 

L0:  clHeapFree(pCookie);
     clBufferDelete(&outMsgHdl);
     return;
}
ClRcT clMsgClientsTrackCallbackServer_4_0_0(ClEoDataT eoData, ClBufferHandleT inMsgHdl, ClBufferHandleT outMsgHdl)
{
    ClIdlContextInfoT *pIdlCtxInfo = NULL;
    ClRcT rc = CL_OK;
    ClHandleT  clientHandle;
    ClNameT  pGroupName;
    SaMsgQueueGroupNotificationBufferT_4_0_0  pNotification;

    memset(&(clientHandle), 0, sizeof(ClHandleT));
    memset(&(pGroupName), 0, sizeof(ClNameT));
    memset(&(pNotification), 0, sizeof(SaMsgQueueGroupNotificationBufferT_4_0_0));


    rc = clXdrUnmarshallClHandleT( inMsgHdl,&(clientHandle));
    if (CL_OK != rc)
    {
        goto LL0;
    }

    rc = clXdrUnmarshallClNameT( inMsgHdl,&(pGroupName));
    if (CL_OK != rc)
    {
        goto LL1;
    }

    rc = clXdrUnmarshallSaMsgQueueGroupNotificationBufferT_4_0_0( inMsgHdl,&(pNotification));
    if (CL_OK != rc)
    {
        goto LL2;
    }

    pIdlCtxInfo = (ClIdlContextInfoT *)clHeapAllocate(sizeof(ClIdlContextInfoT));
    if(pIdlCtxInfo == NULL)
    {
       return CL_IDL_RC(CL_ERR_NO_MEMORY);
    }
    memset(pIdlCtxInfo, 0, sizeof(ClIdlContextInfoT));
    pIdlCtxInfo->idlDeferMsg = outMsgHdl; 
    pIdlCtxInfo->inProgress  = CL_FALSE;
    rc = clIdlSyncPrivateInfoSet(msgCltidlSyncKey, (void *)pIdlCtxInfo);
    if (CL_OK != rc)
    {
        clHeapFree(pIdlCtxInfo);
        goto L0;
    }
    rc = clMsgClientsTrackCallback_4_0_0(clientHandle, &(pGroupName), &(pNotification));
    if(pIdlCtxInfo->inProgress == CL_FALSE)
    {
      clHeapFree(pIdlCtxInfo);
      pIdlCtxInfo = NULL;
    }
    if (CL_OK != rc)
    {
       goto L0;
    }
    
    rc = clXdrMarshallClHandleT(&(clientHandle), 0, 1);
    if (CL_OK != rc)
    {
        goto L1;
    }

    rc = clXdrMarshallClNameT(&(pGroupName), 0, 1);
    if (CL_OK != rc)
    {
        goto L2;
    }

    rc = clXdrMarshallSaMsgQueueGroupNotificationBufferT_4_0_0(&(pNotification), 0, 1);
    if (CL_OK != rc)
    {
        goto L3;
    }

    if(pIdlCtxInfo != NULL)
    {
      clHeapFree(pIdlCtxInfo);
      return rc;
    }
    
L3:    return rc;

LL2:  clXdrMarshallSaMsgQueueGroupNotificationBufferT_4_0_0(&(pNotification), 0, 1);
LL1:  clXdrMarshallClNameT(&(pGroupName), 0, 1);
LL0:  clXdrMarshallClHandleT(&(clientHandle), 0, 1);

    return rc;

L0:  clXdrMarshallClHandleT(&(clientHandle), 0, 1);
L1:  clXdrMarshallClNameT(&(pGroupName), 0, 1);
L2:  clXdrMarshallSaMsgQueueGroupNotificationBufferT_4_0_0(&(pNotification), 0, 1);


    return rc;
}