IO#dup behavior shows channels should be loosely held by IO objects
-------------------------------------------------------------------

                 Key: JRUBY-1957
                 URL: http://jira.codehaus.org/browse/JRUBY-1957
             Project: JRuby
          Issue Type: Bug
            Reporter: Charles Oliver Nutter
            Assignee: Thomas E Enebo
             Fix For: JRuby 1.1


Here's part of the man page for close:

{noformat}
     The close() call deletes a descriptor from the per-process object refer-
     ence table.  If this is the last reference to the underlying object, the
     object will be deactivated.  For example, on the last close of a file the
     current seek pointer associated with the file is lost; on the last close
     of a socket(2) associated naming information and queued data are dis-
     carded; on the last close of a file holding an advisory lock the lock is
     released (see further flock(2)).
{noformat}

Given this and the recently-discovered fact that IO objects returned by IO#dup 
can be closed independently, it appears that IO#close should decrement a count 
of references to a given channel, with the last close being the one to actually 
close it. This would mimic the OS behavior described above and correct a number 
of specs.

An alternative, if it is possible, would be to duplicate the channel and expect 
that the underlying NIO impl will handle the reference counting. However, in my 
reading of the NIO APIs there does not appear to be a way to do this.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to