reading thread name

View: New views
3 Messages — Rating Filter:   Alert me  

reading thread name

by Nagy1981 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,
I am modifying the CPP Interpreter such that the InterpreterRuntime function below gets invoked on each Java bytecode method call:

IRT_ENTRY(void, InterpreterRuntime::CCT_update(JavaThread *thread, int type))
       
  static methodOop current = NULL; // calling method
 
  static int bci = -1;     // call-site

       
        // ignore non-java threads
  if (!thread->is_Java_thread())
  return;
 
  // ignore non-named threads
  if (strcmp(thread->name(), "Unknown Thread") == 0)
  return;

...

The funtion should return, if the name of the thread is "Unknown Thread". This works fine for a simple HelloWorld program, but when I try one of DaCapo benchmarks the execution fails with the following error:

#
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space?
#
#  Internal Error (allocation.cpp:117), pid=27659, tid=3084180368
#  Error: ChunkPool::allocate
#
# Java VM: OpenJDK Server VM (13.0-b02 interpreted mode linux-x86 )
# An error report file with more information is saved as:
# /home/nagy/research/hotspot/test/hs_err_pid27659.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
Aborted


After trying to debug the code, I found that the problem is with the call to thread->name(). When I remove it, the execution terminates successfully. It seems that successive calls to thread->name() induces some sort of memory leakage. Is this a bug in hotspot or is there something I am missing here ?

thanks,
- nagy



Re: reading thread name

by Volker Simonis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Nagy,

you can try to put a ResourceMark in the block where you use
"thread->name()" like so:

...
ResourceMark rm;
// ignore non-named threads
if (strcmp(thread->name(), "Unknown Thread") == 0)
   return;
...

A resource mark releases all resources allocated after it was
constructed when the destructor is called and thread->name() somwhere
calls UNICODE::as_utf8 which allocates memory in the thread-local
resource area.

Regards,
Volker

On 7/11/08, Nagy1981 <nagy.mostafa@...> wrote:

>
>  Hi,
>  I am modifying the CPP Interpreter such that the InterpreterRuntime function
>  below gets invoked on each Java bytecode method call:
>
>  IRT_ENTRY(void, InterpreterRuntime::CCT_update(JavaThread *thread, int
>  type))
>
>         static methodOop current = NULL;        // calling method
>
>         static int bci = -1;                 // call-site
>
>
>         // ignore non-java threads
>         if (!thread->is_Java_thread())
>                 return;
>
>         // ignore non-named threads
>         if (strcmp(thread->name(), "Unknown Thread") == 0)
>                 return;
>  ...
>
>  The funtion should return, if the name of the thread is "Unknown Thread".
>  This works fine for a simple HelloWorld program, but when I try one of
>  DaCapo benchmarks the execution fails with the following error:
>
>  #
>  # A fatal error has been detected by the Java Runtime Environment:
>  #
>  # java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate.
>  Out of swap space?
>  #
>  #  Internal Error (allocation.cpp:117), pid=27659, tid=3084180368
>  #  Error: ChunkPool::allocate
>  #
>  # Java VM: OpenJDK Server VM (13.0-b02 interpreted mode linux-x86 )
>  # An error report file with more information is saved as:
>  # /home/nagy/research/hotspot/test/hs_err_pid27659.log
>  #
>  # If you would like to submit a bug report, please visit:
>  #   http://java.sun.com/webapps/bugreport/crash.jsp
>  #
>  Aborted
>
>  After trying to debug the code, I found that the problem is with the call to
>  thread->name(). When I remove it, the execution terminates successfully. It
>  seems that successive calls to thread->name() induces some sort of memory
>  leakage. Is this a bug in hotspot or is there something I am missing here ?
>
>  thanks,
>  - nagy
>
>
>
>
>  --
>  View this message in context: http://www.nabble.com/reading-thread-name-tp18394454p18394454.html
>  Sent from the OpenJDK Hotspot Compiler Development List mailing list archive at Nabble.com.
>
>

Re: reading thread name

by Nagy1981 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Yes, that did the trick. Thanks Volker, I wouldn't have guessed that :)

Also at looking at my code snippet, I have static variables. Is that
thread-safe ? In other words are the calls to InterpreterRuntime
synchronized, or do I have to do that manually ?

- nagy

Volker Simonis wrote:

> Hi Nagy,
>
> you can try to put a ResourceMark in the block where you use
> "thread->name()" like so:
>
> ...
> ResourceMark rm;
> // ignore non-named threads
> if (strcmp(thread->name(), "Unknown Thread") == 0)
>    return;
> ...
>
> A resource mark releases all resources allocated after it was
> constructed when the destructor is called and thread->name() somwhere
> calls UNICODE::as_utf8 which allocates memory in the thread-local
> resource area.
>
> Regards,
> Volker
>
> On 7/11/08, Nagy1981 <nagy.mostafa@...> wrote:
>  
>>  Hi,
>>  I am modifying the CPP Interpreter such that the InterpreterRuntime function
>>  below gets invoked on each Java bytecode method call:
>>
>>  IRT_ENTRY(void, InterpreterRuntime::CCT_update(JavaThread *thread, int
>>  type))
>>
>>         static methodOop current = NULL;        // calling method
>>
>>         static int bci = -1;                 // call-site
>>
>>
>>         // ignore non-java threads
>>         if (!thread->is_Java_thread())
>>                 return;
>>
>>         // ignore non-named threads
>>         if (strcmp(thread->name(), "Unknown Thread") == 0)
>>                 return;
>>  ...
>>
>>  The funtion should return, if the name of the thread is "Unknown Thread".
>>  This works fine for a simple HelloWorld program, but when I try one of
>>  DaCapo benchmarks the execution fails with the following error:
>>
>>  #
>>  # A fatal error has been detected by the Java Runtime Environment:
>>  #
>>  # java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate.
>>  Out of swap space?
>>  #
>>  #  Internal Error (allocation.cpp:117), pid=27659, tid=3084180368
>>  #  Error: ChunkPool::allocate
>>  #
>>  # Java VM: OpenJDK Server VM (13.0-b02 interpreted mode linux-x86 )
>>  # An error report file with more information is saved as:
>>  # /home/nagy/research/hotspot/test/hs_err_pid27659.log
>>  #
>>  # If you would like to submit a bug report, please visit:
>>  #   http://java.sun.com/webapps/bugreport/crash.jsp
>>  #
>>  Aborted
>>
>>  After trying to debug the code, I found that the problem is with the call to
>>  thread->name(). When I remove it, the execution terminates successfully. It
>>  seems that successive calls to thread->name() induces some sort of memory
>>  leakage. Is this a bug in hotspot or is there something I am missing here ?
>>
>>  thanks,
>>  - nagy
>>
>>
>>
>>
>>  --
>>  View this message in context: http://www.nabble.com/reading-thread-name-tp18394454p18394454.html
>>  Sent from the OpenJDK Hotspot Compiler Development List mailing list archive at Nabble.com.
>>
>>
>>    
>
>