Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Backport to 8.4/unix the healthy FD_SET reform started by das. Allows Tcl8.4 to have sane fileevents on x86_64 unices at last. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core-8-4-branch |
Files: | files | file ages | folders |
SHA1: |
7ed1f6f7491e2b8c95dca757d54f97ff |
User & Date: | guest 2012-03-04 19:36:35 |
Context
2012-03-06
| ||
20:50 | Compatibility with older Visual Studio versions check-in: 81ada21a92 user: jan.nijtmans tags: core-8-4-branch | |
2012-03-05
| ||
20:11 | merge-mark check-in: b9d5abfcc5 user: jan.nijtmans tags: core-8-5-branch | |
2012-03-04
| ||
19:36 | Backport to 8.4/unix the healthy FD_SET reform started by das. Allows Tcl8.4 to have sane fileevents... check-in: 7ed1f6f749 user: guest tags: core-8-4-branch | |
16:36 | Patch from the cygwin folks check-in: 8cbc14c4dd user: jan.nijtmans tags: core-8-4-branch | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2012-03-04 Jan Nijtmans <[email protected]> * generic/tclLoad.c: Patch from the cygwin folks * unix/tcl.m4: * unix/configure: (re-generated) 2012-02-29 Jan Nijtmans <[email protected]> | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | 2012-03-04 Alexandre Ferrieux <[email protected]> * unix/tclUnixChan.c: TclUnixWaitForFile(): use FD_* macros * macosx/tclMacOSXNotify.c: to manipulate select masks (Cassoff). [Bug 3486554]. Backport of das' checkin [e496f9ef50]. Allows Tcl8.4 to have sane fileevents on x86_64 at last. 2012-03-04 Jan Nijtmans <[email protected]> * generic/tclLoad.c: Patch from the cygwin folks * unix/tcl.m4: * unix/configure: (re-generated) 2012-02-29 Jan Nijtmans <[email protected]> |
︙ | ︙ |
Changes to unix/tclUnixChan.c.
︙ | ︙ | |||
3191 3192 3193 3194 3195 3196 3197 | * of the conditions in mask to occur, in * milliseconds. A value of 0 means don't * wait at all, and a value of -1 means * wait forever. */ { Tcl_Time abortTime = {0, 0}, now; /* silence gcc 4 warning */ struct timeval blockTime, *timeoutPtr; | | < | | > | > > > > | > > > > > | 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 | * of the conditions in mask to occur, in * milliseconds. A value of 0 means don't * wait at all, and a value of -1 means * wait forever. */ { Tcl_Time abortTime = {0, 0}, now; /* silence gcc 4 warning */ struct timeval blockTime, *timeoutPtr; int numFound, result = 0; fd_set readableMask; fd_set writableMask; fd_set exceptionalMask; #ifndef _DARWIN_C_SOURCE /* * Sanity check fd. */ if (fd >= FD_SETSIZE) { Tcl_Panic("TclUnixWaitForFile can't handle file id %d", fd); /* must never get here, or select masks overrun will occur below */ } #endif /* * If there is a non-zero finite timeout, compute the time when * we give up. */ if (timeout > 0) { |
︙ | ︙ | |||
3221 3222 3223 3224 3225 3226 3227 | blockTime.tv_sec = 0; blockTime.tv_usec = 0; } else { timeoutPtr = NULL; } /* | | | < < < | | | 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 | blockTime.tv_sec = 0; blockTime.tv_usec = 0; } else { timeoutPtr = NULL; } /* * Initialize the select masks. */ FD_ZERO(&readableMask); FD_ZERO(&writableMask); FD_ZERO(&exceptionalMask); /* * Loop in a mini-event loop of our own, waiting for either the * file to become ready or a timeout to occur. */ while (1) { |
︙ | ︙ | |||
3251 3252 3253 3254 3255 3256 3257 | if (blockTime.tv_sec < 0) { blockTime.tv_sec = 0; blockTime.tv_usec = 0; } } /* | | | | | | | | < | | | | | 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 | if (blockTime.tv_sec < 0) { blockTime.tv_sec = 0; blockTime.tv_usec = 0; } } /* * Setup the select masks for the fd. */ if (mask & TCL_READABLE) { FD_SET(fd, &readableMask); } if (mask & TCL_WRITABLE) { FD_SET(fd, &writableMask); } if (mask & TCL_EXCEPTION) { FD_SET(fd, &exceptionalMask); } /* * Wait for the event or a timeout. */ numFound = select(fd + 1, &readableMask, &writableMask, &exceptionalMask, timeoutPtr); if (numFound == 1) { if (FD_ISSET(fd, &readableMask)) { result |= TCL_READABLE; } if (FD_ISSET(fd, &writableMask)) { result |= TCL_WRITABLE; } if (FD_ISSET(fd, &exceptionalMask)) { result |= TCL_EXCEPTION; } result &= mask; if (result) { break; } } |
︙ | ︙ |