summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
| | * | Improved the error messages. dkf2014-06-074-39/+104
| | | | | | | | | | | | | | | | We do not want parsing an invalid dictionary to give errors about lists! As compensation, we get greater precision in the errorcode.
| | * | merge trunkdkf2014-06-063-5/+83
| | |\ \ | | |/ / | |/| |
| * | | Tests socket*-2.12 test for DiscardOutput() updates.dgp2014-06-051-1/+39
| |\ \ \ | | | |/ | | |/|
| | * | Test socket-2.12 covers the DiscardOutput() update.dgp2014-06-051-1/+39
| | | |
| * | | When too many chars are read by ReadChars() and we trim the limits to get it ↵dgp2014-06-052-4/+44
| |\ \ \ | | |/ / | | | | | | | | right on the next pass, don't forget the TCL_UTF_MAX padding demanded by Tcl_ExternalToUtf(). (Thanks for finding that, aku!) Fix the factorPtr management. It was just totaly wrong. The factor should be a ratio of the record of bytes read to the record of chars read. With those fixes, new test io-12.6 covers the "too many chars" code.
| | * | merge forkdgp2014-06-050-0/+0
| | |\ \
| | | * | Fixed a tricky interaction of IO system and encodings which couldandreask2014-06-051-2/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | result in a panic. The relevant function is ReadChars() (short RC in the following). When the encoding and translation transforms deliver more characters than were requested the iterative algorithm used by RC reduces the value of "dstLimit" (= the number of bytes allowed to be copied into the destination buffer) to force the next round to deliver less characters, hopefully the number requested. The existing code used the byte located just after the last wanted character to determine the new limit. The resulting value could _undershoot_ the best possible limit because Tcl_ExternalToUtf would effectively reduce this limit further, by TCL_UTF_MAX+1, to have enough space for a single multi-byte character in the buffer, and a closing '\0' as well. One effect of this were additional calls to ReadChars() to retrieve the characters missed by a call with an undershot limit. In the limit (sic) however this was also able to cause a full-blown "Buffer Underflow" panic if the original request was for less than TCL_UTF_MAX characters (*), and we are using a single-byte encoding like iso-8859-1. Because then the undershot dstLimit would prevent the next round from copying anything, and causing it to try and consolidate the current buffer with the next buffer, thinking that it had to merge a multi-byte character split across buffer boundaries. (Ad *) For example because the previous call had undershot already and left only such a small amount of characters behind! The basic fix to the problem is to add TCL_UTF_MAX back to the limit, like is done in all the (three) other places in RC setting a new one. Note however that this naive fix may generate a new limit which is the same as the old, or possibly larger. If that happens we act very conservatively and reduce the limit by only one byte instead. While I believe that this last conservative approach will never reduce the limit to TCL_UTF_MAX or less before reaching a state where it returnds the exact amount of requested characters I still added a check against this situation anyway, causing a new panic if triggered.
| | * | | When too many chars are read by ReadChars() and we trim the limits todgp2014-06-052-4/+44
| | |/ / | | | | | | | | | | | | | | | | | | | | | | | | get it right on the next pass, don't forget the TCL_UTF_MAX padding demanded by Tcl_ExternalToUtf(). (Thanks for finding that, aku!) Fix the factorPtr management. It was just totaly wrong. The factor should be a ratio of the record of bytes read to the record of chars read. With those fixes, new test io-12.6 covers the "too many chars" code.
| | | * merge trunkdkf2014-06-064-15/+29
| | | |\ | | |_|/ | |/| |
| * | | Add missing calls to Tcl_DecrRefCount() in string object man page examples.andy2014-06-041-1/+4
| | | |
| * | | Revise DiscardOutput() to account for revisions to the loop in ↵dgp2014-06-041-0/+5
| |\ \ \ | | |/ / | | | | | | | | FlushChannel() which is its only caller. We need to discard the curOutPtr buffer as well, and not count on another pass through the loop to attempt to flush it (and raise the same failure again?).
| | * | Revise DiscardOutput() to account for revisions to the loop in FlushChannel()dgp2014-06-041-0/+5
| | | | | | | | | | | | | | | | | | | | which is its only caller. We need to discard the curOutPtr buffer as well, and not count on another pass through the loop to attempt to flush it (and raise the same failure again?).
| | * | merge fork of 8.5 branchdgp2014-06-034-27/+42
| | |\ \
| * | | | Valgrind doesn't like use of uninitialized variables.dgp2014-06-041-1/+1
| | | | |
| | | | |
| | \ \ \
| *-. \ \ \ [734138ded8] Revisions so that unreported errors don't get lost duringdgp2014-06-033-13/+19
| |\ \ \ \ \ | | | | |/ / | | | |/| | the close of a channel.
| | | * | | Backport I/O core fixes made known by async socket work on trunk.dgp2014-06-031-7/+15
| | | |\ \ \ | | | |/ / / | | |/| | |
| | * | | | These edits make all tests outside of socket-14.* pass on OSX Mavericks.dgp_async_socketdgp2014-06-031-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | Several socket-14.* tests failing there, and those that pass are very slow about it. Firewall or poor networking configuration may be playing a role.
| | * | | | These edits make the tests socket-14.11.[01] stop hanging, but also introducedgp2014-06-023-12/+16
| |/ / / / | | | | | | | | | | a whole raft of test failures. WIP.
| | * | | win socket -async: do not loose connect notification by temporarily stop ↵oehhar2014-05-301-6/+14
| | |\ \ \ | | | | | | | | | | | | | | | | | | connect monitoring. Bug [336441ed59]
| | | * | | Try not to loose FD_CONNECT by switching monitoring off.bug_336441ed59oehhar2014-05-291-5/+9
| | | | | |
| | | * | | merge core-8-5-branchoehhar2014-05-2938-1664/+2195
| | | |\ \ \ | | | |/ / / | | |/| | |
| | | | | * more tests, cleaning up the code a bitdkf2014-06-042-16/+42
| | | | | |
| | | | | * merge trunkdkf2014-06-031-60/+75
| | | | | |\ | | |_|_|_|/ | |/| | | |
| * | | | | Improve robustness of the socket tests against systems that support IPv6, ↵max2014-06-021-60/+75
| | | | | | | | | | | | | | | | | | | | | | | | but don't resolve localhost to ::1 (and vice versa for IPv4 and 127.0.0.1).
| | | | | * [1b0266d8bb] Working towards ensuring that all dict operations are ↵dkf2014-06-032-25/+63
| | |_|_|/ | |/| | | | | | | | | | | | | sufficiently strict.
| * | | | Correct the interest masks in the Tcl_CreateFileHandler() calls in ↵dgp2014-05-313-13/+14
| |\ \ \ \ | | | |_|/ | | |/| | | | | | | PipeWatchProc(). When we are interested in both readable and writable events of a command pipeline channel, we only want the readable from the read end of the pipe, and the writable from the write end of the pipe.
| | * | | Correct the interest masks in the Tcl_CreateFileHandler() calls indgp2014-05-313-13/+14
| | |/ / | | | | | | | | | | | | | | | | PipeWatchProc(). When we are interested in both readable and writable events of a command pipeline channel, we only want the readable from the read end of the pipe, and the writable from the write end of the pipe.
| * | | Refinements of FlushChannel() and its callers. Notably includes removal of ↵dgp2014-05-293-118/+73
| |\ \ \ | | |/ / | | | | | | | | the flag BUFFER_READY.
| | * | Refinements of FlushChannel() and its callers. Notably includes removaldgp2014-05-283-99/+67
| | |\ \ | | | | | | | | | | of the flag BUFFER_READY.
| | | * | Update comment to explain assumptions.dgp_flush_channeldgp2014-05-281-3/+10
| | | | |
| | | * | Further simplifications to FlushChannel(). This makes clear thedgp2014-05-282-81/+38
| | | | | | | | | | | | | | | BUFFER_READY flag serves no necessary purpose, so it is removed.
| | | * | Expand the IsBufferFull() macro to check non-NULL bufPtr..dgp2014-05-281-7/+10
| | | | |
| | | * | Increase size of test io-29.34 so that it more portably tests the case wheredgp2014-05-282-2/+11
| | | | | | | | | | | | | | | | | | | | the OS networking machinery gets backed up and blocks. Added several TODO comments on potential simplifications.
| | | * | Move code that can only matter in the first loop iteration out of the loop.dgp2014-05-271-13/+6
| | |/ /
| | * | Comment out lines of test io-53.4 that appear to do nothing of any value.dgp2014-05-241-5/+5
| | | |
| * | | Merged the workarounds and fixes for wrapped executables on variousandreask2014-05-281-1/+85
| |\ \ \ | | |/ / | | | | | | | | | | | | platforms into the trunk. For details see the merged revision and its ancestor.
| | * | Followup on [72c54e1659]. Removed unused variable.andreask2014-05-231-1/+0
| | | |
| | * | Workarounds and fixes for wrapped executables on various platforms andreask2014-05-221-1/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | regarding the handling of wrapped dynamic libraries. The basic flow of operation is to copy such libraries into a temp file, hand them to the OS loader for processing, and then to delete them immediately, to prevent them from being accessible to other executables. On platforms where that is not possible the library is left in place and things are arranged to delete it on regular process exit. An example of the latter are older revisions of HPUX which report that the file is busy when trying to delete it. Younger revisions of HPUX have changed to allow the deletion, but are also buggy, the OS loader mangles its data structures so that a second library loaded in this manner fails. More recently it was found that Linux which is usually ok with deleting the file and gets everything right shows the same trouble as modern HPUX when the "docker" containerization system is involved, or more specifically the AUFS in use there. Deleting the loaded library file mangles data structures and breaks loading of the following libraries. For a demonstration which does not involve Tcl at all see the ticket https://github.com/dotcloud/docker/issues/1911 in the docker tracker. This of course breaks the use of wrapped executables within docker containers. This commit introduces the function TclSkipUnlink() which centralizes the handling of such exceptions to unlinking the library after unload, and provides code handling the known cases. IOW HPUX is generally forced to not unlink, and ditto when we detect that the copied library file resides within an AUFS. The latter must however be explicitly activated by setting the define -DTCL_TEMPLOAD_NO_UNLINK during build. We still need proper configure tests to set it on the relevant platforms (i.e. Linux). The AUFS detection and handling can be overridden by the environment variable TCL_TEMPLOAD_NO_UNLINK which can force the behaviour either way (skip or not). In case the user knows best, or wishes to test if the problem with AUFS has been fixed.
| * | | eliminate two unused variables.jan.nijtmans2014-05-231-2/+0
| | | |
| * | | Ditto [dict append], [dict incr], and [dict lappend]. Update description of ↵andy2014-05-211-4/+7
| | | | | | | | | | | | | | | | [dict create] to explicitly state that it returns the new dictionary.
| * | | Ditto [dict unset].andy2014-05-211-1/+2
| | | |
| * | | Update dict man page to state that [dict set] returns the updated dictionary ↵andy2014-05-211-1/+1
| | | | | | | | | | | | | | | | value.
| * | | Fix gcc warning (signed-unsigned compare)jan.nijtmans2014-05-211-1/+1
| | | |
| * | | Fix c&p errors in test descriptionsmax2014-05-211-4/+4
| | | |
| | | |
| | \ \
| *-. \ \ Rework the management of the CHANNEL_BLOCKED and CHANNEL_EOF flags, in ↵dgp2014-05-207-239/+196
| |\ \ \ \ | | | |/ / | | | | | | | | | | particular not allowing them to leak between multiple layers of a stacked channel. Much common code refactored into ChanRead().
| | | * | Rework the management of the CHANNEL_BLOCKED and CHANNEL_EOF flags, indgp2014-05-204-161/+172
| | | |\ \ | | | | | | | | | | | | | | | | | | particular not allowing them to leak between multiple layers of a stacked channel. Much common code refactored into ChanRead().
| | | | * | Simplify the inputProc of [testchannel transform].dgp_channel_flag_repairdgp2014-05-171-21/+18
| | | | | |
| | | | * | Repair broken tests iogt-2.[123].dgp2014-05-171-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What happened is that now that EOF flags no loger leak acros channel stack layers, an EOF in the bottom channel isn't detected in the top one until the ChanRead call at the top level actually returns 0 bytes. This causes one more query/ma
| | | | * | Improved use of EOF state to avoid worthless allocations.dgp2014-05-161-10/+12
| | | | | |
| | | | * | Move the resets and testings of the BLOCKED flag to where they make more sense.dgp2014-05-161-22/+17
| | | | | |