/* * ======== 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; }
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; }
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; }
/* * ======== 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; }
/* * ======== 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); }