ClRcT clXdrUnmarshallSaMsgQueueGroupNotificationBufferT_4_0_0(ClBufferHandleT msg , void* pGenVar)
{
    SaMsgQueueGroupNotificationBufferT_4_0_0* pVar = (SaMsgQueueGroupNotificationBufferT_4_0_0*)pGenVar;
    ClRcT     rc     = CL_OK;
    ClUint32T length = 0;

    if ((void*)0 == pVar)
    {
        return CL_XDR_RC(CL_ERR_NULL_POINTER);
    }

    clXdrUnmarshallClUint32T(msg, &length);
    if( 0 == length)
    {
        pGenVar = NULL;
    }
    else
    {

    rc = clXdrUnmarshallClUint32T(msg,&(pVar->numberOfItems));
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrUnmarshallSaMsgQueueGroupPolicyT_4_0_0(msg,&(pVar->queueGroupPolicy));
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrUnmarshallPtrSaMsgQueueGroupNotificationT_4_0_0(msg,(void**)&(pVar->notification),pVar->numberOfItems);
    if (CL_OK != rc)
    {
        return rc;
    }

    }

    return rc;
}
ClRcT clMsgGroupDatabaseUpdateServer_4_0_0(ClEoDataT eoData, ClBufferHandleT inMsgHdl, ClBufferHandleT outMsgHdl)
{
    ClIdlContextInfoT *pIdlCtxInfo = NULL;
    ClRcT rc = CL_OK;
    ClMsgSyncActionT_4_0_0  syncupType;
    SaNameT  pGroupName;
    SaMsgQueueGroupPolicyT_4_0_0  policy;
    ClIocPhysicalAddressT_4_0_0  qGroupAddress;
    ClUint16T  updateCkpt;

    memset(&(syncupType), 0, sizeof(ClMsgSyncActionT_4_0_0));
    memset(&(pGroupName), 0, sizeof(SaNameT));
    memset(&(policy), 0, sizeof(SaMsgQueueGroupPolicyT_4_0_0));
    memset(&(qGroupAddress), 0, sizeof(ClIocPhysicalAddressT_4_0_0));
    memset(&(updateCkpt), 0, sizeof(ClUint16T));


    rc = clXdrUnmarshallClMsgSyncActionT_4_0_0( inMsgHdl,&(syncupType));
    if (CL_OK != rc)
    {
        goto LL0;
    }

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

    rc = clXdrUnmarshallSaMsgQueueGroupPolicyT_4_0_0( inMsgHdl,&(policy));
    if (CL_OK != rc)
    {
        goto LL2;
    }

    rc = clXdrUnmarshallClIocPhysicalAddressT_4_0_0( inMsgHdl,&(qGroupAddress));
    if (CL_OK != rc)
    {
        goto LL3;
    }

    rc = clXdrUnmarshallClUint16T( inMsgHdl,&(updateCkpt));
    if (CL_OK != rc)
    {
        goto LL4;
    }

    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(msgIdlidlSyncKey, (void *)pIdlCtxInfo);
    if (CL_OK != rc)
    {
        clHeapFree(pIdlCtxInfo);
        goto L0;
    }
    rc = clMsgGroupDatabaseUpdate_4_0_0(syncupType, &(pGroupName), policy, qGroupAddress, updateCkpt);
    if(pIdlCtxInfo->inProgress == CL_FALSE)
    {
      clHeapFree(pIdlCtxInfo);
      pIdlCtxInfo = NULL;
    }
    if (CL_OK != rc)
    {
       goto L0;
    }
    
    rc = clXdrMarshallClMsgSyncActionT_4_0_0(&(syncupType), 0, 1);
    if (CL_OK != rc)
    {
        goto L1;
    }

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

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

    rc = clXdrMarshallClIocPhysicalAddressT_4_0_0(&(qGroupAddress), 0, 1);
    if (CL_OK != rc)
    {
        goto L4;
    }

    rc = clXdrMarshallClUint16T(&(updateCkpt), 0, 1);
    if (CL_OK != rc)
    {
        goto L5;
    }

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

LL4:  clXdrMarshallClUint16T(&(updateCkpt), 0, 1);
LL3:  clXdrMarshallClIocPhysicalAddressT_4_0_0(&(qGroupAddress), 0, 1);
LL2:  clXdrMarshallSaMsgQueueGroupPolicyT_4_0_0(&(policy), 0, 1);
LL1:  clXdrMarshallSaNameT(&(pGroupName), 0, 1);
LL0:  clXdrMarshallClMsgSyncActionT_4_0_0(&(syncupType), 0, 1);

    return rc;

L0:  clXdrMarshallClMsgSyncActionT_4_0_0(&(syncupType), 0, 1);
L1:  clXdrMarshallSaNameT(&(pGroupName), 0, 1);
L2:  clXdrMarshallSaMsgQueueGroupPolicyT_4_0_0(&(policy), 0, 1);
L3:  clXdrMarshallClIocPhysicalAddressT_4_0_0(&(qGroupAddress), 0, 1);
L4:  clXdrMarshallClUint16T(&(updateCkpt), 0, 1);


    return rc;
}
static void clMsgGroupDatabaseUpdateAsyncCallback_4_0_0(ClRcT rc, void *pIdlCookie, ClBufferHandleT inMsgHdl, ClBufferHandleT outMsgHdl)
{
    ClIdlCookieT* pCookie = (ClIdlCookieT*)pIdlCookie;
    ClRcT retVal = CL_OK;
    ClMsgSyncActionT_4_0_0  syncupType;
    ClNameT  pGroupName;
    SaMsgQueueGroupPolicyT_4_0_0  policy;
    ClIocPhysicalAddressT_4_0_0  qGroupAddress;
    ClUint16T  updateCkpt;

    memset(&(syncupType), 0, sizeof(ClMsgSyncActionT_4_0_0));
    memset(&(pGroupName), 0, sizeof(ClNameT));
    memset(&(policy), 0, sizeof(SaMsgQueueGroupPolicyT_4_0_0));
    memset(&(qGroupAddress), 0, sizeof(ClIocPhysicalAddressT_4_0_0));
    memset(&(updateCkpt), 0, sizeof(ClUint16T));


    retVal = clXdrUnmarshallClMsgSyncActionT_4_0_0(inMsgHdl, &(syncupType));
    if (CL_OK != retVal)
    {
        goto L0;
    }

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

    retVal = clXdrUnmarshallSaMsgQueueGroupPolicyT_4_0_0(inMsgHdl, &(policy));
    if (CL_OK != retVal)
    {
        goto L2;
    }

    retVal = clXdrUnmarshallClIocPhysicalAddressT_4_0_0(inMsgHdl, &(qGroupAddress));
    if (CL_OK != retVal)
    {
        goto L3;
    }

    retVal = clXdrUnmarshallClUint16T(inMsgHdl, &(updateCkpt));
    if (CL_OK != retVal)
    {
        goto L4;
    }

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

    ((MsgIdlClMsgGroupDatabaseUpdateAsyncCallbackT_4_0_0)(pCookie->actualCallback))(pCookie->handle, syncupType, &(pGroupName), policy, qGroupAddress, updateCkpt, retVal, pCookie->pCookie);
    goto L5;

L5: 
L4: 
L3: 
L2: 
L1: 

L0:  clHeapFree(pCookie);
     clBufferDelete(&outMsgHdl);
     return;
}