Fri, 27 Sep 2019 10:27:29 +0800
8216064: -XX:StartFlightRecording:settings= doesn't work properly
Reviewed-by: mgronlun
1.1 --- a/src/share/vm/jfr/dcmd/jfrDcmds.cpp Fri Sep 27 10:09:50 2019 +0800 1.2 +++ b/src/share/vm/jfr/dcmd/jfrDcmds.cpp Fri Sep 27 10:27:29 2019 +0800 1.3 @@ -434,7 +434,13 @@ 1.4 1.5 jobjectArray settings = NULL; 1.6 if (_settings.is_set()) { 1.7 - const int length = _settings.value()->array()->length(); 1.8 + int length = _settings.value()->array()->length(); 1.9 + if (length == 1) { 1.10 + const char* c_str = _settings.value()->array()->at(0); 1.11 + if (strcmp(c_str, "none") == 0) { 1.12 + length = 0; 1.13 + } 1.14 + } 1.15 settings = JfrJavaSupport::new_string_array(length, CHECK); 1.16 assert(settings != NULL, "invariant"); 1.17 for (int i = 0; i < length; ++i) {
2.1 --- a/src/share/vm/jfr/jni/jfrJavaCall.cpp Fri Sep 27 10:09:50 2019 +0800 2.2 +++ b/src/share/vm/jfr/jni/jfrJavaCall.cpp Fri Sep 27 10:27:29 2019 +0800 2.3 @@ -184,7 +184,7 @@ 2.4 } 2.5 } 2.6 2.7 -JfrJavaArguments::JfrJavaArguments(JavaValue* result) : _result(result), _klass(NULL), _name(NULL), _signature(NULL), _array_length(0) { 2.8 +JfrJavaArguments::JfrJavaArguments(JavaValue* result) : _result(result), _klass(NULL), _name(NULL), _signature(NULL), _array_length(-1) { 2.9 assert(result != NULL, "invariant"); 2.10 } 2.11 2.12 @@ -193,7 +193,7 @@ 2.13 _klass(NULL), 2.14 _name(NULL), 2.15 _signature(NULL), 2.16 - _array_length(0) { 2.17 + _array_length(-1) { 2.18 assert(result != NULL, "invariant"); 2.19 if (klass_name != NULL) { 2.20 set_klass(klass_name, CHECK); 2.21 @@ -210,7 +210,7 @@ 2.22 _klass(NULL), 2.23 _name(NULL), 2.24 _signature(NULL), 2.25 - _array_length(0) { 2.26 + _array_length(-1) { 2.27 assert(result != NULL, "invariant"); 2.28 if (klass != NULL) { 2.29 set_klass(klass);
3.1 --- a/src/share/vm/jfr/jni/jfrJavaSupport.cpp Fri Sep 27 10:09:50 2019 +0800 3.2 +++ b/src/share/vm/jfr/jni/jfrJavaSupport.cpp Fri Sep 27 10:27:29 2019 +0800 3.3 @@ -166,7 +166,7 @@ 3.4 3.5 const int array_length = args->array_length(); 3.6 3.7 - if (array_length > 0) { 3.8 + if (array_length >= 0) { 3.9 array_construction(args, result, klass, array_length, CHECK); 3.10 } else { 3.11 object_construction(args, result, klass, THREAD);