提交 f07210b6 编写于 作者: A asaha

Merge

......@@ -904,6 +904,7 @@ e4525db272634b980738003eff99ac1588bb79d3 jdk8u111-b05
019b22dd8128840ecdcd1bfebcf4447e28e45068 jdk8u111-b06
3f337aaf090769653ee0a746fbe661d09055a883 jdk8u111-b07
e180e364a40364a059a20c74b97ab4e928e2b676 jdk8u111-b08
c48b303692bb86c42e928da6dec815e901a24c5b jdk8u111-b09
b09a69142dd3bf78ca66bb0c99046ca7cccbdda9 jdk8u112-b00
cf1faa9100dd8c8df6e1a604aaf613d037f51ebf jdk8u112-b01
f22b5be95347c669a1463d9e05ec3bf11420208e jdk8u112-b02
......@@ -912,4 +913,5 @@ c171546c49b5ff57bcb74bb54e8860647f83f268 jdk8u112-b04
4b7af794466ba22461ed043a1394df43e4993c4f jdk8u112-b06
55ed9b0a35e4ad4bb5ca3f393f6749e81ad9fef0 jdk8u112-b07
670f8169b83c6af14339fe37b2a2b8384dc2149b jdk8u112-b08
1ccd27199595fedefcd1ca4a335e049887c63107 jdk8u112-b09
3b0e5f01891f5ebbf67797b1aae786196f1bb4f6 jdk8u121-b00
......@@ -111,6 +111,7 @@ Method::Method(ConstMethod* xconst, AccessFlags access_flags, int size) {
// Release Method*. The nmethod will be gone when we get here because
// we've walked the code cache.
void Method::deallocate_contents(ClassLoaderData* loader_data) {
clear_jmethod_id(loader_data);
MetadataFactory::free_metadata(loader_data, constMethod());
set_constMethod(NULL);
MetadataFactory::free_metadata(loader_data, method_data());
......@@ -1800,6 +1801,17 @@ class JNIMethodBlock : public CHeapObj<mtClass> {
#endif // ASSERT
*m = _free_method;
}
void clear_method(Method* m) {
for (JNIMethodBlock* b = this; b != NULL; b = b->_next) {
for (int i = 0; i < number_of_methods; i++) {
if (b->_methods[i] == m) {
b->_methods[i] = NULL;
return;
}
}
}
// not found
}
// During class unloading the methods are cleared, which is different
// than freed.
......@@ -1872,7 +1884,9 @@ void Method::change_method_associated_with_jmethod_id(jmethodID jmid, Method* ne
bool Method::is_method_id(jmethodID mid) {
Method* m = resolve_jmethod_id(mid);
assert(m != NULL, "should be called with non-null method");
if (m == NULL) {
return false;
}
InstanceKlass* ik = m->method_holder();
if (ik == NULL) {
return false;
......@@ -1905,6 +1919,10 @@ void Method::set_on_stack(const bool value) {
}
}
void Method::clear_jmethod_id(ClassLoaderData* loader_data) {
loader_data->jmethod_ids()->clear_method(this);
}
// Called when the class loader is unloaded to make all methods weak.
void Method::clear_jmethod_ids(ClassLoaderData* loader_data) {
loader_data->jmethod_ids()->clear_all_methods();
......
......@@ -768,6 +768,8 @@ class Method : public Metadata {
// Helper routines for intrinsic_id() and vmIntrinsics::method().
void init_intrinsic_id(); // updates from _none if a match
void clear_jmethod_id(ClassLoaderData* loader_data);
static vmSymbols::SID klass_id_for_intrinsics(Klass* holder);
bool jfr_towrite() { return _jfr_towrite; }
......
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -2872,7 +2872,18 @@ ATTRIBUTE_PRINTF(3, 0)
int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args) {
// see bug 4399518, 4417214
if ((intptr_t)count <= 0) return -1;
return vsnprintf(str, count, fmt, args);
int result = vsnprintf(str, count, fmt, args);
// Note: on truncation vsnprintf(3) on Unix returns number of
// characters which would have been written had the buffer been large
// enough; on Windows, it returns -1. We handle both cases here and
// always return -1, and perform null termination.
if ((result > 0 && (size_t)result >= count) || result == -1) {
str[count - 1] = '\0';
result = -1;
}
return result;
}
ATTRIBUTE_PRINTF(3, 0)
......
......@@ -1881,8 +1881,6 @@ const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
trap_reason_name(reason),
recomp_flag ? " recompiled" : "");
}
if (len >= buflen)
buf[buflen-1] = '\0';
return buf;
}
......@@ -1952,8 +1950,6 @@ const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
len = jio_snprintf(buf, buflen, "reason='%s' action='%s' index='%d'",
reason, action, unloaded_class_index);
}
if (len >= buflen)
buf[buflen-1] = '\0';
return buf;
}
......
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -773,25 +773,36 @@ int JDK_Version::compare(const JDK_Version& other) const {
}
void JDK_Version::to_string(char* buffer, size_t buflen) const {
assert(buffer && buflen > 0, "call with useful buffer");
size_t index = 0;
if (!is_valid()) {
jio_snprintf(buffer, buflen, "%s", "(uninitialized)");
} else if (is_partially_initialized()) {
jio_snprintf(buffer, buflen, "%s", "(uninitialized) pre-1.6.0");
} else {
index += jio_snprintf(
int rc = jio_snprintf(
&buffer[index], buflen - index, "%d.%d", _major, _minor);
if (rc == -1) return;
index += rc;
if (_micro > 0) {
index += jio_snprintf(&buffer[index], buflen - index, ".%d", _micro);
rc = jio_snprintf(&buffer[index], buflen - index, ".%d", _micro);
if (rc == -1) return;
index += rc;
}
if (_update > 0) {
index += jio_snprintf(&buffer[index], buflen - index, "_%02d", _update);
rc = jio_snprintf(&buffer[index], buflen - index, "_%02d", _update);
if (rc == -1) return;
index += rc;
}
if (_special > 0) {
index += jio_snprintf(&buffer[index], buflen - index, "%c", _special);
rc = jio_snprintf(&buffer[index], buflen - index, "%c", _special);
if (rc == -1) return;
index += rc;
}
if (_build > 0) {
index += jio_snprintf(&buffer[index], buflen - index, "-b%02d", _build);
rc = jio_snprintf(&buffer[index], buflen - index, "-b%02d", _build);
if (rc == -1) return;
index += rc;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册