users@grizzly.java.net

Re: exception using ByteBufferManager

From: Jon Brisbin <jon_at_jbrisbin.com>
Date: Thu, 28 Jul 2011 10:11:16 -0500 (CDT)

I tried this in my shootout example and got this:

java.lang.IllegalStateException: CompositeBuffer has already been disposed
at org.glassfish.grizzly.memory.BuffersBuffer.checkDispose(BuffersBuffer.java:1614)
at org.glassfish.grizzly.memory.BuffersBuffer.remaining(BuffersBuffer.java:348)
at org.glassfish.grizzly.http.server.io.InputBuffer.available(InputBuffer.java:357)
at org.glassfish.grizzly.http.server.io.InputBuffer.readyData(InputBuffer.java:349)
at org.glassfish.grizzly.http.server.io.InputBuffer.notifyAvailable(InputBuffer.java:731)
at org.glassfish.grizzly.http.server.io.InputBuffer.notifyAvailable(InputBuffer.java:691)
at org.glassfish.grizzly.http.server.NIOInputStreamImpl.notifyAvailable(NIOInputStreamImpl.java:139)
at org.glassfish.grizzly.http.server.io.NIOInputSource$notifyAvailable.call(Unknown Source)

here's my handler code:

def readAvailable() {
def len = inputStream.readyData()
def inputStreamBuffer = inputStream.getBuffer()
def writeBuff = inputStreamBuffer.toByteBuffer()
try {
channel.write(writeBuff, bytes.get(), writeBuff, handler)
bytes.addAndGet(len)
} finally {
inputStreamBuffer.tryDispose()
}
}

Thanks!

Jon Brisbin
http//jbrisbin.com

----- Original Message -----

> From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> To: users_at_grizzly.java.net
> Sent: Thursday, July 28, 2011 6:22:00 AM
> Subject: Re: exception using ByteBufferManager

> Hi Jon,

> I've updated the sample [1], so you can try to uncomment couple of
> lines to try direct buffers.
> Only one thing - you need to use latest Grizzly trunk to run it.

> Thanks.

> WBR,
> Alexey.

> [1]
> http://java.net/projects/grizzly/sources/git/content/samples/http-server-samples/src/main/java/org/glassfish/grizzly/samples/httpserver/nonblockinghandler/UploadHttpHandlerSample.java

> On 07/27/2011 10:58 PM, Jon Brisbin wrote:
> > I'm trying to use the ByteBufferManager in my application because
> > I'm
> > hitting some issues with garbage collecting all these byte arrays
> > I'm allocating for writing uploads. Whenever I try and allocate an
> > object from it, though, I get this exception:
>

> > java.lang.ClassCastException: java.nio.DirectByteBuffer cannot be
> > cast to org.glassfish.grizzly.memory.HeapBuffer
>
> > at
> > org.glassfish.grizzly.memory.HeapMemoryManager$HeapBufferThreadLocalPool.reset(HeapMemoryManager.java:307)
>
> > at
> > org.glassfish.grizzly.memory.ByteBufferManager.reallocatePoolBuffer(ByteBufferManager.java:371)
>
> > at
> > org.glassfish.grizzly.memory.ByteBufferManager.allocateByteBuffer(ByteBufferManager.java:238)
>
> > at
> > org.glassfish.grizzly.memory.ByteBufferAware$allocateByteBuffer.call(Unknown
> > Source)
>

> > Are there example of proper use of this somewhere?
>

> > Thanks!
>

> > Jon Brisbin
>
> > http//jbrisbin.com
>