/*
 *  ======== MemMgr_deleteDaemon ========
 */
void MemMgr_deleteDaemon(MemMgr_Daemon_Handle *handle)
{
    MemMgr_Daemon_Object *obj = *(MemMgr_Daemon_Object **)handle;


    /* delete the rcm client instance */
    RcmServer_delete(&(obj->hRcmServer));

    Memory_free(NULL, (Ptr)obj, sizeof(MemMgr_Daemon_Object));
    *handle = NULL;
}
Ejemplo n.º 2
0
static UInt32 createService(Char * name, UInt32 * endpt)
{
    Int i;
    Int status = 0;
    struct ServiceDef *sd;
    RcmServer_Handle  rcmSrvHandle;

    for (i = 0; i < ServiceMgr_NUMSERVICETYPES; i++) {
       if (!strcmp(name, serviceDefs[i].name)) {
           sd = &serviceDefs[i];
           break;
       }
    }

    if (i >= ServiceMgr_NUMSERVICETYPES) {
       System_printf("createService: unrecognized service name: %s\n", name);
       return OMX_NOTSUPP;
    }

    /* Create the RcmServer instance. */
#if 0
    System_printf("createService: Calling RcmServer_create with name = %s\n"
                  "priority = %d\n"
                  "osPriority = %d\n"
                  "rcmServerParams.fxns.length = %d\n",
                  sd->name, sd->rcmServerParams.priority,
                  sd->rcmServerParams.osPriority,
                  sd->rcmServerParams.fxns.length);
#endif
    status = RcmServer_create(sd->name, &sd->rcmServerParams, &rcmSrvHandle);

    if (status < 0) {
        System_printf("createService: RcmServer_create() returned error %d\n",
                       status);
        return OMX_FAIL;
    }

    /* Get endpoint allowing clients to send messages to this new server: */
    *endpt = RcmServer_getLocalAddress(rcmSrvHandle);

    /* Store Server's endpoint with handle so we can cleanup on disconnect: */
    if (!storeTuple(*endpt, (UInt32)rcmSrvHandle))  {
        System_printf("createService: Limit reached on max instances!\n");
        RcmServer_delete(&rcmSrvHandle);
        return OMX_FAIL;
    }

    /* start the server */
    RcmServer_start(rcmSrvHandle);

    System_printf("createService: new OMX Service at endpoint: %d\n", *endpt);

    return OMX_SUCCESS;
}
Ejemplo n.º 3
0
static UInt32 deleteService(UInt32 addr)
{
    Int status = 0;
    RcmServer_Handle  rcmSrvHandle;

    if (!removeTuple(addr, (UInt32 *)&rcmSrvHandle))  {
       System_printf("deleteService: could not find service instance at"
                     " address: 0x%x\n", addr);
       return OMX_FAIL;
    }

    /* Destroy the RcmServer instance. */
    status = RcmServer_delete(&rcmSrvHandle);
    if (status < 0) {
        System_printf("deleteService: RcmServer_delete() returned error %d\n",
                       status);
        return OMX_FAIL;
    }

    System_printf("deleteService: removed RcmServer at endpoint: %d\n", addr);

    return OMX_SUCCESS;
}
Ejemplo n.º 4
0
/*
 *  ======== RcmServerCleanup ========
 */
Int RcmServerCleanup (Int testCase)
{
    Int                  status             = 0;
#if !defined(SYSLINK_USE_DAEMON)
    ProcMgr_StopParams   stopParams;
#endif

    Osal_printf ("\nRcmServerCleanup: Entering RcmServerCleanup()\n");
    /* Delete the rcm server */
    Osal_printf ("RcmServerCleanup: Delete RCM server instance \n");
    status = RcmServer_delete (&rcmServerHandle);
    if (status < 0)
        Osal_printf ("RcmServerCleanup: Error in RCM Server instance delete"
                    " [0x%x]\n", status);
    else
        Osal_printf ("RcmServerCleanup: RcmServer_delete status: [0x%x]\n",
                        status);

    /* Rcm server module destroy */
    Osal_printf ("RcmServerCleanup: Clean up RCM server module \n");
    RcmServer_exit ();

    /* Finalize modules */
#if !defined(SYSLINK_USE_DAEMON)    // Do not call ProcMgr_stop if using daemon
    status = MessageQ_unregisterHeap (RCM_MSGQ_HEAPID);
    if (status < 0)
        Osal_printf ("RcmServerCleanup: Error in MessageQ_unregisterHeap"
                     " [0x%x]\n", status);
    else
        Osal_printf ("RcmServerCleanup: MessageQ_unregisterHeap status:"
                     " [0x%x]\n", status);

    if (heapHandleServer) {
        status = HeapBufMP_delete (&heapHandleServer);
        if (status < 0)
            Osal_printf ("RcmServerCleanup: Error in HeapBufMP_delete [0x%x]\n",
                            status);
        else
            Osal_printf ("RcmServerCleanup: HeapBufMP_delete status: [0x%x]\n",
                            status);
    }

    if (heapBufPtrServer) {
        Memory_free (srHeapServer, heapBufPtrServer, heapSizeServer);
    }

    stopParams.proc_id = remoteIdServer;
    if (testCase == 2) {
        status = ProcMgr_stop (procMgrHandleServer1, &stopParams);
        if (status < 0)
            Osal_printf ("RcmServerCleanup: Error in ProcMgr_stop [0x%x]\n",
                            status);
        else
            Osal_printf ("RcmServerCleanup: ProcMgr_stop status: [0x%x]\n",
                            status);
        stopParams.proc_id = MultiProc_getId (SYSM3_PROC_NAME);
    }

    status = ProcMgr_stop (procMgrHandleServer, &stopParams);
    if (status < 0)
        Osal_printf ("RcmServerCleanup: Error in ProcMgr_stop [0x%x]\n",
                        status);
    else
        Osal_printf ("RcmServerCleanup: ProcMgr_stop status: [0x%x]\n",
                        status);
#endif

    if (testCase == 2) {
        status =  ProcMgr_detach (procMgrHandleServer1);
        Osal_printf ("RcmServerCleanup: ProcMgr_detach status [0x%x]\n",
                        status);

        status = ProcMgr_close (&procMgrHandleServer1);
        if (status < 0)
            Osal_printf ("RcmServerCleanup: Error in ProcMgr_close [0x%x]\n",
                            status);
        else
            Osal_printf ("RcmServerCleanup: ProcMgr_close status: [0x%x]\n",
                            status);
    }

    status =  ProcMgr_detach (procMgrHandleServer);
    Osal_printf ("RcmServerCleanup: ProcMgr_detach status [0x%x]\n", status);

    status = ProcMgr_close (&procMgrHandleServer);
    if (status < 0)
        Osal_printf ("RcmServerCleanup: Error in ProcMgr_close [0x%x]\n",
                        status);
    else
        Osal_printf ("RcmServerCleanup: ProcMgr_close status: [0x%x]\n",
                        status);

    status = Ipc_destroy ();
    if (status < 0)
        Osal_printf ("RcmServerCleanup: Error in Ipc_destroy [0x%x]\n", status);
    else
        Osal_printf ("RcmServerCleanup: Ipc_destroy status: [0x%x]\n", status);

    Osal_printf ("RcmServerCleanup: Leaving RcmServerCleanup()\n");
    return status;
}
Ejemplo n.º 5
0
/*
 *  ======== Server_finish ========
 *
 *  1. close remote resources
 *  2. handshake close event
 *  3. delete shared resoures
 *  4. send disconnect event (last event sent)
 *  5. wait for disconnect event
 *  6. unregister notify callback
 *  9. delete semaphore object
 */
Int Server_finish(Void)
{
    Int         status;
    UInt32      event;


    /*
     *  1. close remote resources
     */

    /* delete the RcmServer instance */
    status = RcmServer_delete(&Module.rcmServerH);

    if (status < 0) {
        Log_error1("Server_finish: RcmServer_delete() returned error %d",
            (IArg)status);
        goto leave;
    }

    /* unregister rcm heap with MessageQ */
    status = MessageQ_unregisterHeap(Global_RcmClientHeapId);

    if (status < 0) {
        goto leave;
    }

    /* close the rcm heap */
    status = HeapBufMP_close(&Module.heapH);

    if (status < 0) {
        Log_error1("Server_finish: HeapBufMP_close() returned error %d",
            (IArg)status);
        goto leave;
    }


    /*
     *  2. handshake close event
     */
    status = Notify_sendEvent(Module.hostProcId, Module.lineId,
        Module.eventId, App_CMD_CLOSED, TRUE);

    if (status < 0) {
        goto leave;
    }

    do {
        event = Server_waitForEvent();

        if (event >= App_E_FAILURE) {
            status = -1;
            goto leave;
        }
    } while (event != App_CMD_CLOSED);


    /*
     *  3. delete shared resoures
     */


    /*
     *  4. send disconnect event (last event sent)
     */
    status = Notify_sendEvent(Module.hostProcId, Module.lineId,
        Module.eventId, App_CMD_DONE, TRUE);

    if (status < 0) {
        goto leave;
    }


    /*
     *  5. wait for disconnect event (last event received)
     */
    do {
        event = Server_waitForEvent();

        if (event >= App_E_FAILURE) {
            status = -1;
            goto leave;
        }
    } while (event != App_CMD_DONE);


    /*
     *  6. unregister notify callback
     */
    status = Notify_unregisterEventSingle(Module.hostProcId, Module.lineId,
        Module.eventId);

    if (status < 0) {
        goto leave;
    }


    /*
     *  9. delete semaphore object
     */
    Semaphore_destruct(&Module.semS);
    Module.semH = NULL;


leave:
    return(status);
}