Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Map WSAEWOULDBLOCK to EWOULDBLOCK. Suggested by Reinhard Max. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b34eced1804c93a5d2294a9df23fc253 |
User & Date: | jan.nijtmans 2013-11-16 20:33:17 |
Context
2013-11-16
| ||
21:06 | Fix [e832d2b08]: unnecessary code in Tcl_SetMaxBlockTime. check-in: 04b08d7303 user: jan.nijtmans tags: trunk | |
20:33 | Map WSAEWOULDBLOCK to EWOULDBLOCK. Suggested by Reinhard Max. check-in: b34eced180 user: jan.nijtmans tags: trunk | |
2013-11-15
| ||
16:13 | Don't leak getaddrinfo() results check-in: a94b14f5b4 user: max tags: trunk | |
Changes
Changes to win/tclWinConsole.c.
︙ | ︙ | |||
796 797 798 799 800 801 802 | timeout = (infoPtr->flags & CONSOLE_ASYNC) ? 0 : INFINITE; if (WaitForSingleObject(threadInfo->readyEvent,timeout) == WAIT_TIMEOUT) { /* * The writer thread is blocked waiting for a write to complete and * the channel is in non-blocking mode. */ | | | 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 | timeout = (infoPtr->flags & CONSOLE_ASYNC) ? 0 : INFINITE; if (WaitForSingleObject(threadInfo->readyEvent,timeout) == WAIT_TIMEOUT) { /* * The writer thread is blocked waiting for a write to complete and * the channel is in non-blocking mode. */ errno = EWOULDBLOCK; goto error; } /* * Check for a background error on the last write. */ |
︙ | ︙ | |||
1075 1076 1077 1078 1079 1080 1081 | if (WaitForSingleObject(threadInfo->readyEvent, timeout) == WAIT_TIMEOUT) { /* * The reader thread is blocked waiting for data and the channel * is in non-blocking mode. */ | | | 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 | if (WaitForSingleObject(threadInfo->readyEvent, timeout) == WAIT_TIMEOUT) { /* * The reader thread is blocked waiting for data and the channel * is in non-blocking mode. */ errno = EWOULDBLOCK; return -1; } /* * At this point, the two threads are synchronized, so it is safe to * access shared state. */ |
︙ | ︙ |
Changes to win/tclWinError.c.
︙ | ︙ | |||
288 289 290 291 292 293 294 | /* * The following table contains the mapping from WinSock errors to * errno errors. */ static const unsigned char wsaErrorTable[] = { | | | 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 | /* * The following table contains the mapping from WinSock errors to * errno errors. */ static const unsigned char wsaErrorTable[] = { EWOULDBLOCK, /* WSAEWOULDBLOCK */ EINPROGRESS, /* WSAEINPROGRESS */ EALREADY, /* WSAEALREADY */ ENOTSOCK, /* WSAENOTSOCK */ EDESTADDRREQ, /* WSAEDESTADDRREQ */ EMSGSIZE, /* WSAEMSGSIZE */ EPROTOTYPE, /* WSAEPROTOTYPE */ ENOPROTOOPT, /* WSAENOPROTOOPT */ |
︙ | ︙ |
Changes to win/tclWinPipe.c.
︙ | ︙ | |||
1880 1881 1882 1883 1884 1885 1886 | if (TclInExit() && (pipePtr->flags & PIPE_ASYNC)) { /* give it a chance to leave honorably */ SetEvent(pipePtr->stopWriter); if (WaitForSingleObject(pipePtr->writable, 0) == WAIT_TIMEOUT) { | | | 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 | if (TclInExit() && (pipePtr->flags & PIPE_ASYNC)) { /* give it a chance to leave honorably */ SetEvent(pipePtr->stopWriter); if (WaitForSingleObject(pipePtr->writable, 0) == WAIT_TIMEOUT) { return EWOULDBLOCK; } } else { WaitForSingleObject(pipePtr->writable, INFINITE); } |
︙ | ︙ | |||
2157 2158 2159 2160 2161 2162 2163 | timeout = (infoPtr->flags & PIPE_ASYNC) ? 0 : INFINITE; if (WaitForSingleObject(infoPtr->writable, timeout) == WAIT_TIMEOUT) { /* * The writer thread is blocked waiting for a write to complete and * the channel is in non-blocking mode. */ | | | 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 | timeout = (infoPtr->flags & PIPE_ASYNC) ? 0 : INFINITE; if (WaitForSingleObject(infoPtr->writable, timeout) == WAIT_TIMEOUT) { /* * The writer thread is blocked waiting for a write to complete and * the channel is in non-blocking mode. */ errno = EWOULDBLOCK; goto error; } /* * Check for a background error on the last write. */ |
︙ | ︙ | |||
2708 2709 2710 2711 2712 2713 2714 | timeout = blocking ? INFINITE : 0; if (WaitForSingleObject(infoPtr->readable, timeout) == WAIT_TIMEOUT) { /* * The reader thread is blocked waiting for data and the channel * is in non-blocking mode. */ | | | 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 | timeout = blocking ? INFINITE : 0; if (WaitForSingleObject(infoPtr->readable, timeout) == WAIT_TIMEOUT) { /* * The reader thread is blocked waiting for data and the channel * is in non-blocking mode. */ errno = EWOULDBLOCK; return -1; } /* * At this point, the two threads are synchronized, so it is safe to * access shared state. */ |
︙ | ︙ |
Changes to win/tclWinSerial.c.
︙ | ︙ | |||
928 929 930 931 932 933 934 | */ if (cStat.cbInQue > 0) { if ((DWORD) bufSize > cStat.cbInQue) { bufSize = cStat.cbInQue; } } else { | | | 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 | */ if (cStat.cbInQue > 0) { if ((DWORD) bufSize > cStat.cbInQue) { bufSize = cStat.cbInQue; } } else { errno = *errorCode = EWOULDBLOCK; return -1; } } else { /* * BLOCKING mode: Tcl trys to read a full buffer of 4 kBytes here. */ |
︙ | ︙ | |||
1030 1031 1032 1033 1034 1035 1036 | timeout = (infoPtr->flags & SERIAL_ASYNC) ? 0 : INFINITE; if (WaitForSingleObject(infoPtr->evWritable, timeout) == WAIT_TIMEOUT) { /* * The writer thread is blocked waiting for a write to complete and * the channel is in non-blocking mode. */ | | | 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 | timeout = (infoPtr->flags & SERIAL_ASYNC) ? 0 : INFINITE; if (WaitForSingleObject(infoPtr->evWritable, timeout) == WAIT_TIMEOUT) { /* * The writer thread is blocked waiting for a write to complete and * the channel is in non-blocking mode. */ errno = EWOULDBLOCK; goto error1; } /* * Check for a background error on the last write. */ |
︙ | ︙ |
Changes to win/tclWinSock.c.
︙ | ︙ | |||
1314 1315 1316 1317 1318 1319 1320 | /* * Attempt to connect to the remote socket. */ if (connect(sock, addrPtr->ai_addr, addrPtr->ai_addrlen) == SOCKET_ERROR) { TclWinConvertError((DWORD) WSAGetLastError()); | | | 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 | /* * Attempt to connect to the remote socket. */ if (connect(sock, addrPtr->ai_addr, addrPtr->ai_addrlen) == SOCKET_ERROR) { TclWinConvertError((DWORD) WSAGetLastError()); if (Tcl_GetErrno() != EWOULDBLOCK) { goto looperror; } /* * The connection is progressing in the background. */ |
︙ | ︙ | |||
1437 1438 1439 1440 1441 1442 1443 | if (infoPtr->lastError) { *errorCodePtr = infoPtr->lastError; result = 0; break; } else if (infoPtr->readyEvents & events) { break; } else if (infoPtr->flags & SOCKET_ASYNC) { | | | 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 | if (infoPtr->lastError) { *errorCodePtr = infoPtr->lastError; result = 0; break; } else if (infoPtr->readyEvents & events) { break; } else if (infoPtr->flags & SOCKET_ASYNC) { *errorCodePtr = EWOULDBLOCK; result = 0; break; } /* * Wait until something happens. */ |
︙ | ︙ | |||
1922 1923 1924 1925 1926 1927 1928 | * send fails with WSAEWOULDBLOCK. */ error = WSAGetLastError(); if (error == WSAEWOULDBLOCK) { infoPtr->readyEvents &= ~(FD_WRITE); if (infoPtr->flags & SOCKET_ASYNC) { | | | 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 | * send fails with WSAEWOULDBLOCK. */ error = WSAGetLastError(); if (error == WSAEWOULDBLOCK) { infoPtr->readyEvents &= ~(FD_WRITE); if (infoPtr->flags & SOCKET_ASYNC) { *errorCodePtr = EWOULDBLOCK; bytesWritten = -1; break; } } else { TclWinConvertError(error); *errorCodePtr = Tcl_GetErrno(); bytesWritten = -1; |
︙ | ︙ |