Hi all,

Could you review and sponsor it?

   http://cr.openjdk.java.net/~ysuenaga/JDK-8151815/webrev.01/

If it is not accepted, I think that we can add new field to PerfMemory for 
using in JSnap:
-----------------------
diff -r 4823056a5bbd src/share/vm/runtime/perfMemory.cpp
--- a/src/share/vm/runtime/perfMemory.cpp       Tue Apr 12 09:08:48 2016 +0000
+++ b/src/share/vm/runtime/perfMemory.cpp       Wed Apr 13 14:18:15 2016 +0900
@@ -45,11 +45,16 @@
                                             UINT_CHARS + 1;
char* PerfMemory::_start = NULL;
+char*                    PerfMemory::_saved_start = NULL;
 char*                    PerfMemory::_end = NULL;
+char*                    PerfMemory::_saved_end = NULL;
 char*                    PerfMemory::_top = NULL;
+char*                    PerfMemory::_saved_top = NULL;
 size_t                   PerfMemory::_capacity = 0;
+size_t                   PerfMemory::_saved_capacity = 0;
 jint                     PerfMemory::_initialized = false;
 PerfDataPrologue*        PerfMemory::_prologue = NULL;
+PerfDataPrologue*        PerfMemory::_saved_prologue = NULL;
void perfMemory_init() { @@ -103,6 +108,8 @@ // allocate PerfData memory region
   create_memory_region(capacity);
+  _saved_start = _start;
+  _saved_capacity = _capacity;
if (_start == NULL) { @@ -132,8 +139,11 @@
     }
_prologue = (PerfDataPrologue *)_start;
+    _saved_prologue = _prologue;
     _end = _start + _capacity;
+    _saved_end = _end;
     _top = _start + sizeof(PerfDataPrologue);
+    _saved_top = _top;
   }
assert(_prologue != NULL, "prologue pointer must be initialized");
-----------------------

If it is better, I will upload a webrev.


Thanks,

Yasumasa


On 2016/04/06 12:42, Yasumasa Suenaga wrote:
Hi Dmitry,

Thanks for your comment.

I uploaded a new webrev. Could you review again?
   http://cr.openjdk.java.net/~ysuenaga/JDK-8151815/webrev.01/

On 2016/04/06 0:31, Dmitry Samersoff wrote:
Yasumasa,

1. It's better to change JSnap code to produce meaningful error message
instead of NPE.

I added null check and set message to PerfMemory.java .


2. We should check that no other consumer of perf counters rely on the
fact it's NULL after call to destroy(). I'm not sure that this part of
the fix is not dangerous.

I added new flag (_destroyed) in PerfMemory class.
This flag set true at PerfMemory::destroy().

_start, _end, and more field which I removed from destroy() are private member 
of
PerfMemory. I implemented that the getter functions of them check _destroyed 
flag,
and returns same value before this change.

So I think this change does not affect other place.


Thanks,

Yasumasa


-Dmitry

On 2016-03-29 15:02, Yasumasa Suenaga wrote:
PING: Could you review it?


Yasumasa


On 2016/03/22 21:24, Yasumasa Suenaga wrote:
PING: Could you review it?

Yasumasa

2016/03/14 23:39 "Yasumasa Suenaga" <yasue...@gmail.com
<mailto:yasue...@gmail.com>>:

     Hi all,

     When I use `jhsdb jsnap` to get PerfCounter from core images, I
encountered NPE:
     -------------
     Exception in thread "main" java.lang.NullPointerException
              at sun.jvm.hotspot.tools.JSnap.run(JSnap.java:45)
              at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
              at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
              at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
              at sun.jvm.hotspot.tools.JSnap.main(JSnap.java:67)
              at sun.jvm.hotspot.SALauncher.runJSNAP(SALauncher.java:352)
              at sun.jvm.hotspot.SALauncher.main(SALauncher.java:404)
     -------------

     PerfMemory::destroy() clears all members which are used in JSnap.
     Thus NPE is occurred.

     I uploaded webrev for this issue.
     Could you review it?

     http://cr.openjdk.java.net/~ysuenaga/JDK-8151815/webrev.00/

     I cannot access JPRT.
     So I need a Sponsor.


     Thanks,

     Yasumasa



Reply via email to