Re: ByteBuffer.asReadOnlyBuffer() and direct byte buffers

Erik Larsson <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
Hi,

Should I report this somewhere else?

- Erik

Erik Larsson wrote:
> Hi group,
>
> In the process of trying to run my JNI-enabled library in gcj/gij I 
> discovered what seems to be a bug in libgcj's direct ByteBuffer 
> implementation.
>
> When calling ByteBuffer.asReadOnlyBuffer() for a direct byte buffer, 
> gij throws at me:
> ------
> Exception in thread "main" java.nio.InvalidMarkException
>    at java.nio.Buffer.reset(libgcj.so.10)
>    at java.nio.DirectByteBufferImpl.duplicate(libgcj.so.10)
>    at java.nio.DirectByteBufferImpl.asReadOnlyBuffer(libgcj.so.10)
>    at Test.main(Test.java:18)
> ------
>
> Test code is attached. The InvalidMarkException goes away if you call 
> ByteBuffer.mark() before calling .asReadOnlyBuffer(), but 
> .asReadOnlyBuffer() shouldn't require a defined mark (it doesn't for 
> regular buffers).
>
> gij version:
> ------
> gij (GNU libgcj) version 4.4.1
>
> Copyright (C) 2007 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There 
> is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
> PURPOSE.
> ------
>
> OS: Ubuntu 9.10 (prerelease), i386
>
> I did a little research, and it seems this bug was reported against 
> Classpath in 2005, along with a fix:
>      http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22934
>
> The GNU Classpath code contains what seems to be a fix in the current 
> revision of DirectByteBufferImpl (duplicate() method):
>     
> http://cvs.savannah.gnu.org/viewvc/classpath/java/nio/DirectByteBufferImpl.java?revision=1.24&root=classpath&view=markup 
>
>
> ...but gcc's libjava doesn't have that particular line ('if (this.mark 
> != -1)'):
>     
> http://gcc.gnu.org/viewcvs/trunk/libjava/java/nio/DirectByteBufferImpl.java?revision=141271&view=markup 
>
>
> Regards,
>
> - Erik
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.