Accessing UNIX FileDescriptor id without reflection

Roger Riggs Roger.Riggs at Oracle.com
Mon May 8 15:45:25 UTC 2017


Hi,

I would be very cautious about giving out fds for arbitrary FileDescriptors.
With concurrency and threading, how do you make sure that it does not 
not get closed
and someone's code still has the fd and uses it later?  Or worse yet, 
the fd gets re-used
and then it is possible to operate on the wrong file.
Quite a bit of implementation code assumes it has complete control over 
the lifecycle of
the FileDescriptor.  Exposing the raw FD breaks the encapsulation.

As Rémi suggests, passing the FileDescriptor to native will at least 
maintain the current
encapsulation.

Roger


On 5/8/2017 10:14 AM, Remi Forax wrote:
> I agree that a method getFd should be great, we will need this kind of value if we want to use Panama.
>
> Did you try to serializing the FileDescriptor in memory and extract the int corresponding to the file descriptor ?
>
> cheers,
> Rémi
>
> ----- Mail original -----
>> De: "Enrico Olivelli" <eolivelli at gmail.com>
>> À: core-libs-dev at openjdk.java.net
>> Envoyé: Lundi 8 Mai 2017 15:16:24
>> Objet: Accessing UNIX FileDescriptor id without reflection
>> Hi,
>> I am trying to port a project (Apache BookKeeper) to Java9, actually
>> this code uses reflection in order to access the 'fd' field of the
>> FileDescriptor class.
>>
>> We have to access that ID in order to call low level native functions
>>
>> See
>> https://github.com/apache/bookkeeper/blob/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/NativeIO.java
>> # getSysFileDescriptor
>>
>> Is there any way to access the FD handle without using reflection ?
>> If not, is it possibile to enhance the FileDescriptor API in order to
>> given access to the internal "fd" field ?
>>
>> Thank you
>>
>> Enrico Olivelli



More information about the core-libs-dev mailing list