Beispiel #1
0
/* Return 1 on timeout */
int rtp_sig_semaphore_wait_timed (RTP_SEMAPHORE semHandle, long msecs)
{
    unsigned long ticks;
    RTP_BOOL poll_test;
        
    if (msecs == RTP_TIMEOUT_INFINITE)
    {
        poll_test = pollos_test((P_POLLOS_SIGNAL)semHandle, RTIP_INF);
    }
    else
    {
        /* convert msec to ticks */
        ticks = (rtp_get_ticks_p_sec() * msecs)/1000;
    
        if (ticks < 1)
        {
            ticks = 1;
        }
                
        poll_test = pollos_test((P_POLLOS_SIGNAL)semHandle, ticks);
    }
    if (poll_test == RTP_FALSE)  
    {
        return(1);   /* timed out */
    }
    else
    {
        return(0);
    }
}
BOOL RTIP_SOCKETS_Driver::Uninitialize()
{
    NATIVE_PROFILE_PAL_NETWORK();
    const int c_exitTimeout = 1; // secs
    int exitRetries         = 3; 

    bool fEnabled = INTERRUPTS_ENABLED_STATE();

    if(!fEnabled) ENABLE_INTERRUPTS();

    while(exitRetries--)
    {
        if(!xn_wait_pkts_output( RTP_TRUE, c_exitTimeout * rtp_get_ticks_p_sec() )) break;

        while(HAL_CONTINUATION::Dequeue_And_Execute());
    }

    if(!fEnabled) DISABLE_INTERRUPTS();

#if defined(NETWORK_USE_LOOPBACK)
    // close the loopback driver
    g_LOOPBACK_Driver.Close();
#endif        

    for(int i=0; i<g_NetworkConfig.NetworkInterfaceCount; i++)
    {
    
        UpdateAdapterConfiguration(i, SOCK_NETWORKCONFIGURATION_UPDATE_DHCP_RELEASE, &g_NetworkConfig.NetworkInterfaces[i]);

        Network_Interface_Close(i);
    }
    
    rtp_net_exit();

    return TRUE;
}