Merge
authoriignatyev
Wed, 09 Apr 2014 19:45:59 +0000
changeset 23849 b826a16346da
parent 23847 d792e42aeb4f (current diff)
parent 23848 2a4fff3b50c1 (diff)
child 23850 60ed1852d508
child 24001 d0eea05381dd
Merge
--- a/hotspot/src/share/vm/prims/whitebox.cpp	Wed Apr 09 11:18:02 2014 -0700
+++ b/hotspot/src/share/vm/prims/whitebox.cpp	Wed Apr 09 19:45:59 2014 +0000
@@ -438,6 +438,30 @@
   return (mh->queued_for_compilation() || nm != NULL);
 WB_END
 
+class VM_WhiteBoxOperation : public VM_Operation {
+ public:
+  VM_WhiteBoxOperation()                         { }
+  VMOp_Type type()                  const        { return VMOp_WhiteBoxOperation; }
+  bool allow_nested_vm_operations() const        { return true; }
+};
+
+class AlwaysFalseClosure : public BoolObjectClosure {
+ public:
+  bool do_object_b(oop p) { return false; }
+};
+
+static AlwaysFalseClosure always_false;
+
+class VM_WhiteBoxCleanMethodData : public VM_WhiteBoxOperation {
+ public:
+  VM_WhiteBoxCleanMethodData(MethodData* mdo) : _mdo(mdo) { }
+  void doit() {
+    _mdo->clean_method_data(&always_false);
+  }
+ private:
+  MethodData* _mdo;
+};
+
 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
   CHECK_JNI_EXCEPTION(env);
@@ -453,6 +477,8 @@
     for (int i = 0; i < arg_count; i++) {
       mdo->set_arg_modified(i, 0);
     }
+    VM_WhiteBoxCleanMethodData op(mdo);
+    VMThread::execute(&op);
   }
 
   mh->clear_not_c1_compilable();
--- a/hotspot/src/share/vm/runtime/vm_operations.hpp	Wed Apr 09 11:18:02 2014 -0700
+++ b/hotspot/src/share/vm/runtime/vm_operations.hpp	Wed Apr 09 19:45:59 2014 +0000
@@ -97,6 +97,7 @@
   template(Exit)                                  \
   template(LinuxDllLoad)                          \
   template(RotateGCLog)                           \
+  template(WhiteBoxOperation)                     \
 
 class VM_Operation: public CHeapObj<mtInternal> {
  public: