Tcl Source Code

View Ticket
Login
Ticket UUID: 727786
Title: JANITORIAL: dead/DEPRECATED code in tclUnixChan.c
Type: Patch Version: None
Submitter: jenglish Created on: 2003-04-25 22:17:41
Subsystem: 25. Channel System Assigned To: andreas_kupries
Priority: 3 Low Severity:
Status: Closed Last Modified: 2004-11-11 03:04:57
Resolution: Accepted Closed By: andreas_kupries
    Closed on: 2004-11-10 20:04:57
Description:
The attached patch simply removes the code currently
#ifdef'ed out in tclUnixChan.c. (See followup for
explanation).
User Comments: andreas_kupries added on 2004-11-11 03:04:57:

File Added - 108346: 727786.tar.gz

Logged In: YES 
user_id=75003

Committed to head. Added mail discussion between Joe, Jacob,
and myself.

andreas_kupries added on 2004-10-29 03:23:28:

File Added - 106861: 727786.patch

andreas_kupries added on 2004-10-29 03:23:27:
Logged In: YES 
user_id=75003

Uploading updated patch.

jenglish added on 2003-11-25 09:13:01:

File Added - 68595: tcl-unixchan-tls.patch

Logged In: YES 
user_id=68433

Old patch has gone stale; uploading new one.

Is there any reason to keep this code around?  It's unused,
and it's very likely incorrect.

jenglish added on 2003-04-26 05:20:27:
Logged In: YES 
user_id=68433


History:

Starting with Tcl 7.6, calling Tcl_MakeFileChannel() with the
same inFd and outFd as a previously allocated FileChannel would
return the old FileChannel instead of allocating a new one.
It's not clear why this was done -- this behaviour was not
documented -- but possibly related to the following changelog
entry:

    5/23/96 (bug fix) Fixed bug that allowed
Tcl_MakeFileChannel to create new
    channels with Tcl_Files in them that are already used by
another channel.
    This would cause core dumps when the Tcl_Files were
being freed twice. (JL)

At some point between 7.6 and 8.0, the Tcl_MakeFileChannel() API
was reworked:

    4/23/97 (removed feature) The Tcl_File interfaces have
been removed.
    The Tcl_CreateFileHandler/Tcl_DeleteFileHandler
interfaces now take
    Unix fd's and are only supported on the Unix platform.
    Tcl_GetChannelFile has been replaced with
Tcl_GetChannelHandle.
    Tcl_MakeFileChannel now takes a platform specific file
handle. (SS)
    *** POTENTIAL INCOMPATIBILITY ***

Tcl 8.0 also kept track of a global list of open file channels,
and returned an existing channel if a call to
Tcl_MakeFileChannel()
specified a previously used file descriptor.  This behaviour was
not documented in 8.0 either.  The list of open file
channels was not
used for any other purpose.

In Tcl 8.1, the global list of file channels was replaced with
a thread-specific list (CVS revision 1.10, r1.1.2.1).  The
caching
behaviour was still not documented.

Shortly after Tcl 8.3.2, the per-thread list of file descriptors
was (temporarily) #ifdef'ed out, since it caused problems with
transferring channels.  From the CVS log:

    revision 1.18
    date: 2000/05/02 22:02:37;  author: kupries;  state:
Exp;  lines: +24 -4

    * unix/tclUnixChan.c: #ifdef'd the thread-local list of file
      channels as it prevents us from transfering channels.
To restore
      this we may need an extended interface to drivers in the
      future. Target: 9.0. Found while testing the new
transfer of
      channels. The information in this list for a channel
was left
      behind and then crashed the system during finalization.

The code has remained #ifdef'ed out since then, although
a patch has since been applied to make it work properly
if -DDEPRECATED is supplied; see ChangeLog entry
2003-01-25  Mo DeJong  <[email protected]>.

 * * *

SUMMARY: since this part of the code (a) is only used to
implement an undocumented and quite-possibly incorrect feature,
and (b) has been disabled throughout the 8.4 series without 
any noticeable ill effect, I believe it can be safely removed.

jenglish added on 2003-04-26 05:17:41:

File Added - 48762: tcl-unixchan-tls.patch

Attachments: