Ejemplo n.º 1
0
//--------------------------------------------------------------------------------------------------
LE_SHARED le_result_t le_comm_Delete (void* handle)
{
    HandleRecord_t* connectionRecordPtr = (HandleRecord_t*) handle;

    LE_INFO("Deleting AF_INET socket, fd %d .........", connectionRecordPtr->fd);

    if (FdMonitorRef != NULL)
    {
        // Delete FD monitor
        le_fdMonitor_Delete(FdMonitorRef);
        FdMonitorRef = NULL;
    }

    // Remove the Handle record
    le_hashmap_Remove(HandleRecordByFileDescriptor, (void*)(intptr_t) connectionRecordPtr->fd);

    // Shut-down the open socket
    shutdown(connectionRecordPtr->fd, SHUT_RDWR);

    // Close Socket Handle
    close(connectionRecordPtr->fd);
    connectionRecordPtr->fd = -1;

    // Free the Handle Record memory
    le_mem_Release(connectionRecordPtr);
    connectionRecordPtr = NULL;

    // Reset the Network IP Address and TCP Port
    memset(NetworkSocketIpAddress, 0, sizeof(NetworkSocketIpAddress));
    NetworkSocketTCPListeningPort = 0;

    return LE_OK;
}
Ejemplo n.º 2
0
//--------------------------------------------------------------------------------------------------
static void ServiceDestructor
(
    void* objPtr
)
//--------------------------------------------------------------------------------------------------
{
    Service_t* servicePtr = objPtr;

    le_hashmap_Remove(ServiceMapRef, &servicePtr->id);
}
Ejemplo n.º 3
0
//--------------------------------------------------------------------------------------------------
static void OnClientDisconnect
(
    le_msg_SessionRef_t sessionRef,
    void *contextPtr
)
{
    Client_t *c;
    WakeupSource_t *ws;
    le_hashmap_It_Ref_t iter;

    // Find and remove client record from table
    c = to_Client_t(le_hashmap_Remove(PowerManager.clients, sessionRef));
    LE_INFO("Client pid %d disconnected.", c->pid);

    // Find and remove all wakeup sources held for this client
    iter = le_hashmap_GetIterator(PowerManager.locks);
    while (LE_OK == le_hashmap_NextNode(iter)) {
        ws = (WakeupSource_t*)le_hashmap_GetValue(iter);
        if (ws->pid != c->pid)
            // Does not belong to this client, skip
            continue;

        // Release wakeup source if taken
        if (ws->taken) {
            LE_WARN("Releasing wakeup source '%s' on behalf of pid %d.",
                    ws->name, ws->pid);
            le_pm_Relax((le_pm_WakeupSourceRef_t)ws->wsref);
        }

        // Delete wakeup source record, free memory
        LE_INFO("Deleting wakeup source '%s' on behalf of pid %d.",
                ws->name, ws->pid);
        le_hashmap_Remove(PowerManager.locks, ws->name);
        le_ref_DeleteRef(PowerManager.refs, ws->wsref);
        le_mem_Release(ws);
    }

    // Free client record
    le_mem_Release(c);

    return;
}
Ejemplo n.º 4
0
//--------------------------------------------------------------------------------------------------
static void UserDestructor
(
    void* objectPtr  ///< [IN] The memory object to destroy.
)
//--------------------------------------------------------------------------------------------------
{
    tu_UserRef_t userRef = (tu_UserRef_t)objectPtr;

    le_hashmap_Remove(UserCollectionRef, &userRef->userId);
    memset(userRef, 0, sizeof(User_t));
}
Ejemplo n.º 5
0
//--------------------------------------------------------------------------------------------------
LE_SHARED le_result_t le_comm_Disconnect (void* handle)
{
    HandleRecord_t* connectionRecordPtr = (HandleRecord_t*) handle;
    if (FdMonitorRef != NULL)
    {
        // Disable FD Monitoring
        le_fdMonitor_Disable(FdMonitorRef, PollingEvents);
    }

    le_hashmap_Remove(HandleRecordByFileDescriptor, (void*)(intptr_t) connectionRecordPtr->fd);

    close(connectionRecordPtr->fd);
    connectionRecordPtr->fd = -1;

    return LE_OK;
}
Ejemplo n.º 6
0
//--------------------------------------------------------------------------------------------------
static void ServiceDestructor
(
    void* objPtr
)
//--------------------------------------------------------------------------------------------------
{
    le_dls_Link_t* linkPtr = NULL;

    Service_t* servicePtr = objPtr;

    le_hashmap_Remove(ServiceMapRef, &servicePtr->id);

    /* Release the close handlers dls */
    do
    {
        linkPtr = le_dls_PopTail(&servicePtr->closeListPtr);

        if (linkPtr)
        {
            SessionEventHandler_t* closeEventPtr = CONTAINER_OF(linkPtr, SessionEventHandler_t, link);

            /* Delete the reference */
            le_ref_DeleteRef(HandlersRefMap, closeEventPtr->ref);

            /* Release the memory */
            le_mem_Release(closeEventPtr);
        }
    }
    while (linkPtr);

    /* Release the open handlers dls */
    do
    {
        linkPtr = le_dls_PopTail(&servicePtr->openListPtr);

        if (linkPtr)
        {
            SessionEventHandler_t* openEventPtr = CONTAINER_OF(linkPtr, SessionEventHandler_t, link);

            /* Delete the reference */
            le_ref_DeleteRef(HandlersRefMap, openEventPtr->ref);

            le_mem_Release(openEventPtr);
        }
    }
    while (linkPtr);
}
Ejemplo n.º 7
0
//--------------------------------------------------------------------------------------------------
static void DeleteWatchdog
(
    pid_t dogOwner  ///< The client (hash key) of the Watchdog that we want to dispose of
)
{
    WatchdogObj_t* deadDogPtr = le_hashmap_Remove(WatchdogRefsContainer, &dogOwner);
    if (deadDogPtr != NULL)
    {
        // All good. The dog was in the hash
        LE_DEBUG("Cleaning up watchdog resources for %d", deadDogPtr->procId);
        le_timer_Delete(deadDogPtr->timer);
        le_mem_Release(deadDogPtr);
    }
    else
    {
        // else the dog MUST already be deleted.
        LE_DEBUG("Cleaning up watchdog resources for %d but already freed.", dogOwner);
    }
}