From 4056c8fe0c3d72a1c2df3d28222b261b6a5987b2 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 20 Apr 2004 18:54:39 +0000 Subject: [PATCH] Applied the two patches from Kevin for gsocket and wxGetTUCTime. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26882 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/stopwatch.cpp | 48 +++------------------------------------- src/unix/gsocket.c | 31 ++++++++++++-------------- 2 files changed, 17 insertions(+), 62 deletions(-) diff --git a/src/common/stopwatch.cpp b/src/common/stopwatch.cpp index 1a6fcd064b..2db111c612 100644 --- a/src/common/stopwatch.cpp +++ b/src/common/stopwatch.cpp @@ -193,51 +193,9 @@ long wxGetLocalTime() // Get UTC time as seconds since 00:00:00, Jan 1st 1970 long wxGetUTCTime() { - struct tm tm; - struct tm *ptm; - time_t t0, t1; - - // This cannot be made static because mktime can overwrite it - // - memset(&tm, 0, sizeof(tm)); - tm.tm_year = 70; - tm.tm_mon = 0; - tm.tm_mday = 5; // not Jan 1st 1970 due to mktime 'feature' - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_isdst = -1; // let mktime guess - - // Note that mktime assumes that the struct tm contains local time. - // - t1 = time(&t1); // now - t0 = mktime(&tm); // origin in localtime - - if (( t0 != (time_t)-1 ) && ( t1 != (time_t)-1 )) - { - // To get t0 as GMT we convert to a struct tm with gmtime, - // and then back again. - // - ptm = gmtime(&t0); - - if (ptm) - { - memcpy(&tm, ptm, sizeof(tm)); - t0 = mktime(&tm); - - if (t0 != (time_t)-1 ) - return (long)difftime(t1, t0) + (60 * 60 * 24 * 4); - wxLogSysError(_("mktime() failed")); - } - else - { - wxLogSysError(_("gmtime() failed")); - } - } - - wxLogError(_("Failed to get the UTC system time.")); - - return -1; + long timenow = 0; + time(&timenow); + return timenow; } #if wxUSE_LONGLONG diff --git a/src/unix/gsocket.c b/src/unix/gsocket.c index 3852eebd13..dd8bfc5a92 100644 --- a/src/unix/gsocket.c +++ b/src/unix/gsocket.c @@ -800,27 +800,26 @@ int GSocket_Read(GSocket *socket, char *buffer, int size) assert(socket != NULL); - /* When using CFSocket we MUST NOT reenable events until we finish reading */ -#ifndef __DARWIN__ - /* Reenable INPUT events */ - _GSocket_Enable(socket, GSOCK_INPUT); -#endif - if (socket->m_fd == INVALID_SOCKET || socket->m_server) { socket->m_error = GSOCK_INVSOCK; return -1; } + /* Disable events during query of socket status */ + _GSocket_Disable(socket, GSOCK_INPUT); + /* If the socket is blocking, wait for data (with a timeout) */ if (_GSocket_Input_Timeout(socket) == GSOCK_TIMEDOUT) - return -1; - - /* Read the data */ - if (socket->m_stream) - ret = _GSocket_Recv_Stream(socket, buffer, size); - else - ret = _GSocket_Recv_Dgram(socket, buffer, size); + /* We no longer return here immediately, otherwise socket events would not be re-enabled! */ + ret = -1; + else { + /* Read the data */ + if (socket->m_stream) + ret = _GSocket_Recv_Stream(socket, buffer, size); + else + ret = _GSocket_Recv_Dgram(socket, buffer, size); + } if (ret == -1) { @@ -830,11 +829,9 @@ int GSocket_Read(GSocket *socket, char *buffer, int size) socket->m_error = GSOCK_IOERR; } -#ifdef __DARWIN__ - /* Reenable INPUT events */ + /* Enable events again now that we are done processing */ _GSocket_Enable(socket, GSOCK_INPUT); -#endif - + return ret; } -- 2.45.2