summaryrefslogtreecommitdiffstats
path: root/generic/tclIOGT.c
diff options
context:
space:
mode:
authorandreask <andreask>2014-05-22 17:17:12 (GMT)
committerandreask <andreask>2014-05-22 17:17:12 (GMT)
commitdced768bbaa8b761aa86cf4b8f086039502a7b7d (patch)
tree87314f2a7ca03a166d65f113a6573e021888b299 /generic/tclIOGT.c
parentba99f64fadc5aa254af2bd6c0ed481887704cdcf (diff)
downloadtcl-dced768bbaa8b761aa86cf4b8f086039502a7b7d.zip
tcl-dced768bbaa8b761aa86cf4b8f086039502a7b7d.tar.gz
tcl-dced768bbaa8b761aa86cf4b8f086039502a7b7d.tar.bz2
Workarounds and fixes for wrapped executables on various platforms
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.
Diffstat (limited to 'generic/tclIOGT.c')
0 files changed, 0 insertions, 0 deletions