| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|\
| |
| |
| | |
particular not allowing them to leak between multiple layers of a stacked
channel. Much common code refactored into ChanRead().
|
| | |
|
| | |
|
| | |
|
| |\
| |/
|/| |
|
|\ \ |
|
|\ \ \ |
|
| | | |
| | | |
| | | | |
characters produced. Also delete false assertions.
|
| | | |
| | | |
| | | | |
parts of the channel read machinery.
|
| | | | |
|
| | | |\
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | | |
Refactored much management of the BLOCKED and EOF flags into ChanRead()
then began repairing some of the logic about them.
Tests iogt-2.* now fail because they've been crafted as experiments recording
the fine detail of reflected channel driver calls, and fixing the management
of channel flags is changing that.
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | | |
and refactor.
|
| | | |
| | | |
| | | | |
does segfault trying to use a deleted interp. Fixed.
|
| | |\ \
| | |/ /
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | | |
Large overhaul of I/O read operations
- Protects integer overflow of buffers, reusing append machinery
- Forces -buffersize changes to take place when commanded
- Uses assertions to simplify code in "can't happen" situations
- Eliminated duplication of -translation processing
- Fixes bugs io-35.18b and io-35.20
|
| |\ \ \
| | |/ / |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| |\ \ \
| | |/ / |
|
| | | | |
|
| |\ \ \
| | |/ / |
|
| | | |
| | | |
| | | |
| | | | |
in functionality.
|
| |\ \ \
| | |/ / |
|
| | |\ \ |
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
call that triggers it. "downChanPtr" may no longer be the right argument
at that point. Second, after ending the segfault, the test became an
infinite loop (nested unstacking?! whoa.), so revised the test to one
that terminates (and passes). Left behind a comment that the recursive
unstacking case may require more examination.
|
| | | |\ \ |
|
| | | | |\ \
| | | |_|/ /
| | |/| | |
| | | | | | |
to get error information after channel routines are called (and have possibly called for the channel to go away).
|
| | | | | | | |
| | | | | \ | |
| | | | |\ \ \ |
|
| | | | | | | | |
|
| | | |\ \ \ \ \
| | | | |/ / / / |
|
| | | | |\ \ \ \ |
|
| | | | | | | | | |
|
| | | |/ / / / /
| | | | | | | |
| | | | | | | | |
pushback buffers.
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
where it was allocated. This constraint allows the struct to safely
hold Tcl_Obj values, which has been convenient for storing callback commands.
|
| | | |\ \ \ \ \ |
|
| | | |\ \ \ \ \ \ |
|
| | | |\ \ \ \ \ \ \ |
|