8314114: Fix -Wconversion warnings in os code, primarily linux
Reviewed-by: dholmes, dlong
This commit is contained in:
parent
a02d65efcc
commit
9ded86821b
@ -108,7 +108,7 @@ class AixAttachListener: AllStatic {
|
|||||||
static bool is_shutdown() { return _shutdown; }
|
static bool is_shutdown() { return _shutdown; }
|
||||||
|
|
||||||
// write the given buffer to a socket
|
// write the given buffer to a socket
|
||||||
static int write_fully(int s, char* buf, int len);
|
static int write_fully(int s, char* buf, size_t len);
|
||||||
|
|
||||||
static AixAttachOperation* dequeue();
|
static AixAttachOperation* dequeue();
|
||||||
};
|
};
|
||||||
@ -276,7 +276,7 @@ AixAttachOperation* AixAttachListener::read_request(int s) {
|
|||||||
// where <ver> is the protocol version (1), <cmd> is the command
|
// where <ver> is the protocol version (1), <cmd> is the command
|
||||||
// name ("load", "datadump", ...), and <arg> is an argument
|
// name ("load", "datadump", ...), and <arg> is an argument
|
||||||
int expected_str_count = 2 + AttachOperation::arg_count_max;
|
int expected_str_count = 2 + AttachOperation::arg_count_max;
|
||||||
const int max_len = (sizeof(ver_str) + 1) + (AttachOperation::name_length_max + 1) +
|
const size_t max_len = (sizeof(ver_str) + 1) + (AttachOperation::name_length_max + 1) +
|
||||||
AttachOperation::arg_count_max*(AttachOperation::arg_length_max + 1);
|
AttachOperation::arg_count_max*(AttachOperation::arg_length_max + 1);
|
||||||
|
|
||||||
char buf[max_len];
|
char buf[max_len];
|
||||||
@ -285,15 +285,15 @@ AixAttachOperation* AixAttachListener::read_request(int s) {
|
|||||||
// Read until all (expected) strings have been read, the buffer is
|
// Read until all (expected) strings have been read, the buffer is
|
||||||
// full, or EOF.
|
// full, or EOF.
|
||||||
|
|
||||||
int off = 0;
|
size_t off = 0;
|
||||||
int left = max_len;
|
size_t left = max_len;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int n;
|
ssize_t n;
|
||||||
// Don't block on interrupts because this will
|
// Don't block on interrupts because this will
|
||||||
// hang in the clean-up when shutting down.
|
// hang in the clean-up when shutting down.
|
||||||
n = read(s, buf+off, left);
|
n = read(s, buf+off, left);
|
||||||
assert(n <= left, "buffer was too small, impossible!");
|
assert(n <= checked_cast<ssize_t>(left), "buffer was too small, impossible!");
|
||||||
buf[max_len - 1] = '\0';
|
buf[max_len - 1] = '\0';
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
return nullptr; // reset by peer or other error
|
return nullptr; // reset by peer or other error
|
||||||
@ -414,9 +414,9 @@ AixAttachOperation* AixAttachListener::dequeue() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write the given buffer to the socket
|
// write the given buffer to the socket
|
||||||
int AixAttachListener::write_fully(int s, char* buf, int len) {
|
int AixAttachListener::write_fully(int s, char* buf, size_t len) {
|
||||||
do {
|
do {
|
||||||
int n = ::write(s, buf, len);
|
ssize_t n = ::write(s, buf, len);
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
if (errno != EINTR) return -1;
|
if (errno != EINTR) return -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2985,7 +2985,7 @@ int os::get_core_path(char* buffer, size_t bufferSize) {
|
|||||||
jio_snprintf(buffer, bufferSize, "%s/core or core.%d",
|
jio_snprintf(buffer, bufferSize, "%s/core or core.%d",
|
||||||
p, current_process_id());
|
p, current_process_id());
|
||||||
|
|
||||||
return strlen(buffer);
|
return checked_cast<int>(strlen(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool os::start_debugging(char *buf, int buflen) {
|
bool os::start_debugging(char *buf, int buflen) {
|
||||||
@ -3023,7 +3023,7 @@ static inline time_t get_mtime(const char* filename) {
|
|||||||
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
||||||
time_t t1 = get_mtime(file1);
|
time_t t1 = get_mtime(file1);
|
||||||
time_t t2 = get_mtime(file2);
|
time_t t2 = get_mtime(file2);
|
||||||
return t1 - t2;
|
return primitive_compare(t1, t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool os::supports_map_sync() {
|
bool os::supports_map_sync() {
|
||||||
|
@ -77,7 +77,7 @@ static bool read_psinfo(const u_longlong_t& pid, psinfo_t& psinfo) {
|
|||||||
|
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
char buf[BUF_LENGTH];
|
char buf[BUF_LENGTH];
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
jio_snprintf(buf, BUF_LENGTH, "/proc/%llu/psinfo", pid);
|
jio_snprintf(buf, BUF_LENGTH, "/proc/%llu/psinfo", pid);
|
||||||
fp = fopen(buf, "r");
|
fp = fopen(buf, "r");
|
||||||
|
@ -102,7 +102,7 @@ class BsdAttachListener: AllStatic {
|
|||||||
static int listener() { return _listener; }
|
static int listener() { return _listener; }
|
||||||
|
|
||||||
// write the given buffer to a socket
|
// write the given buffer to a socket
|
||||||
static int write_fully(int s, char* buf, int len);
|
static int write_fully(int s, char* buf, size_t len);
|
||||||
|
|
||||||
static BsdAttachOperation* dequeue();
|
static BsdAttachOperation* dequeue();
|
||||||
};
|
};
|
||||||
@ -257,7 +257,7 @@ BsdAttachOperation* BsdAttachListener::read_request(int s) {
|
|||||||
// where <ver> is the protocol version (1), <cmd> is the command
|
// where <ver> is the protocol version (1), <cmd> is the command
|
||||||
// name ("load", "datadump", ...), and <arg> is an argument
|
// name ("load", "datadump", ...), and <arg> is an argument
|
||||||
int expected_str_count = 2 + AttachOperation::arg_count_max;
|
int expected_str_count = 2 + AttachOperation::arg_count_max;
|
||||||
const int max_len = (sizeof(ver_str) + 1) + (AttachOperation::name_length_max + 1) +
|
const size_t max_len = (sizeof(ver_str) + 1) + (AttachOperation::name_length_max + 1) +
|
||||||
AttachOperation::arg_count_max*(AttachOperation::arg_length_max + 1);
|
AttachOperation::arg_count_max*(AttachOperation::arg_length_max + 1);
|
||||||
|
|
||||||
char buf[max_len];
|
char buf[max_len];
|
||||||
@ -266,13 +266,13 @@ BsdAttachOperation* BsdAttachListener::read_request(int s) {
|
|||||||
// Read until all (expected) strings have been read, the buffer is
|
// Read until all (expected) strings have been read, the buffer is
|
||||||
// full, or EOF.
|
// full, or EOF.
|
||||||
|
|
||||||
int off = 0;
|
size_t off = 0;
|
||||||
int left = max_len;
|
size_t left = max_len;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int n;
|
ssize_t n;
|
||||||
RESTARTABLE(read(s, buf+off, left), n);
|
RESTARTABLE(read(s, buf+off, left), n);
|
||||||
assert(n <= left, "buffer was too small, impossible!");
|
assert(n <= checked_cast<ssize_t>(left), "buffer was too small, impossible!");
|
||||||
buf[max_len - 1] = '\0';
|
buf[max_len - 1] = '\0';
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
return nullptr; // reset by peer or other error
|
return nullptr; // reset by peer or other error
|
||||||
@ -280,7 +280,7 @@ BsdAttachOperation* BsdAttachListener::read_request(int s) {
|
|||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (int i=0; i<n; i++) {
|
for (ssize_t i=0; i<n; i++) {
|
||||||
if (buf[off+i] == 0) {
|
if (buf[off+i] == 0) {
|
||||||
// EOS found
|
// EOS found
|
||||||
str_count++;
|
str_count++;
|
||||||
@ -383,9 +383,9 @@ BsdAttachOperation* BsdAttachListener::dequeue() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write the given buffer to the socket
|
// write the given buffer to the socket
|
||||||
int BsdAttachListener::write_fully(int s, char* buf, int len) {
|
int BsdAttachListener::write_fully(int s, char* buf, size_t len) {
|
||||||
do {
|
do {
|
||||||
int n = ::write(s, buf, len);
|
ssize_t n = ::write(s, buf, len);
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
if (errno != EINTR) return -1;
|
if (errno != EINTR) return -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2208,9 +2208,9 @@ static inline struct timespec get_mtime(const char* filename) {
|
|||||||
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
||||||
struct timespec filetime1 = get_mtime(file1);
|
struct timespec filetime1 = get_mtime(file1);
|
||||||
struct timespec filetime2 = get_mtime(file2);
|
struct timespec filetime2 = get_mtime(file2);
|
||||||
int diff = filetime1.tv_sec - filetime2.tv_sec;
|
int diff = primitive_compare(filetime1.tv_sec, filetime2.tv_sec);
|
||||||
if (diff == 0) {
|
if (diff == 0) {
|
||||||
return filetime1.tv_nsec - filetime2.tv_nsec;
|
diff = primitive_compare(filetime1.tv_nsec, filetime2.tv_nsec);
|
||||||
}
|
}
|
||||||
return diff;
|
return diff;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ class LinuxAttachListener: AllStatic {
|
|||||||
static int listener() { return _listener; }
|
static int listener() { return _listener; }
|
||||||
|
|
||||||
// write the given buffer to a socket
|
// write the given buffer to a socket
|
||||||
static int write_fully(int s, char* buf, int len);
|
static int write_fully(int s, char* buf, size_t len);
|
||||||
|
|
||||||
static LinuxAttachOperation* dequeue();
|
static LinuxAttachOperation* dequeue();
|
||||||
};
|
};
|
||||||
@ -257,7 +257,7 @@ LinuxAttachOperation* LinuxAttachListener::read_request(int s) {
|
|||||||
// where <ver> is the protocol version (1), <cmd> is the command
|
// where <ver> is the protocol version (1), <cmd> is the command
|
||||||
// name ("load", "datadump", ...), and <arg> is an argument
|
// name ("load", "datadump", ...), and <arg> is an argument
|
||||||
int expected_str_count = 2 + AttachOperation::arg_count_max;
|
int expected_str_count = 2 + AttachOperation::arg_count_max;
|
||||||
const int max_len = (sizeof(ver_str) + 1) + (AttachOperation::name_length_max + 1) +
|
const size_t max_len = (sizeof(ver_str) + 1) + (AttachOperation::name_length_max + 1) +
|
||||||
AttachOperation::arg_count_max*(AttachOperation::arg_length_max + 1);
|
AttachOperation::arg_count_max*(AttachOperation::arg_length_max + 1);
|
||||||
|
|
||||||
char buf[max_len];
|
char buf[max_len];
|
||||||
@ -266,13 +266,13 @@ LinuxAttachOperation* LinuxAttachListener::read_request(int s) {
|
|||||||
// Read until all (expected) strings have been read, the buffer is
|
// Read until all (expected) strings have been read, the buffer is
|
||||||
// full, or EOF.
|
// full, or EOF.
|
||||||
|
|
||||||
int off = 0;
|
size_t off = 0;
|
||||||
int left = max_len;
|
size_t left = max_len;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int n;
|
ssize_t n;
|
||||||
RESTARTABLE(read(s, buf+off, left), n);
|
RESTARTABLE(read(s, buf+off, left), n);
|
||||||
assert(n <= left, "buffer was too small, impossible!");
|
assert(n <= checked_cast<ssize_t>(left), "buffer was too small, impossible!");
|
||||||
buf[max_len - 1] = '\0';
|
buf[max_len - 1] = '\0';
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
return nullptr; // reset by peer or other error
|
return nullptr; // reset by peer or other error
|
||||||
@ -280,7 +280,7 @@ LinuxAttachOperation* LinuxAttachListener::read_request(int s) {
|
|||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (int i=0; i<n; i++) {
|
for (ssize_t i=0; i<n; i++) {
|
||||||
if (buf[off+i] == 0) {
|
if (buf[off+i] == 0) {
|
||||||
// EOS found
|
// EOS found
|
||||||
str_count++;
|
str_count++;
|
||||||
@ -383,7 +383,7 @@ LinuxAttachOperation* LinuxAttachListener::dequeue() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write the given buffer to the socket
|
// write the given buffer to the socket
|
||||||
int LinuxAttachListener::write_fully(int s, char* buf, int len) {
|
int LinuxAttachListener::write_fully(int s, char* buf, size_t len) {
|
||||||
do {
|
do {
|
||||||
ssize_t n = ::write(s, buf, len);
|
ssize_t n = ::write(s, buf, len);
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
|
@ -401,7 +401,7 @@ bool os::Linux::get_tick_information(CPUPerfTicks* pticks, int which_logical_cpu
|
|||||||
// Returns the kernel thread id of the currently running thread. Kernel
|
// Returns the kernel thread id of the currently running thread. Kernel
|
||||||
// thread id is used to access /proc.
|
// thread id is used to access /proc.
|
||||||
pid_t os::Linux::gettid() {
|
pid_t os::Linux::gettid() {
|
||||||
int rslt = syscall(SYS_gettid);
|
long rslt = syscall(SYS_gettid);
|
||||||
assert(rslt != -1, "must be."); // old linuxthreads implementation?
|
assert(rslt != -1, "must be."); // old linuxthreads implementation?
|
||||||
return (pid_t)rslt;
|
return (pid_t)rslt;
|
||||||
}
|
}
|
||||||
@ -423,7 +423,7 @@ static const char *unstable_chroot_error = "/proc file system not found.\n"
|
|||||||
"environment on Linux when /proc filesystem is not mounted.";
|
"environment on Linux when /proc filesystem is not mounted.";
|
||||||
|
|
||||||
void os::Linux::initialize_system_info() {
|
void os::Linux::initialize_system_info() {
|
||||||
set_processor_count(sysconf(_SC_NPROCESSORS_CONF));
|
set_processor_count((int)sysconf(_SC_NPROCESSORS_CONF));
|
||||||
if (processor_count() == 1) {
|
if (processor_count() == 1) {
|
||||||
pid_t pid = os::Linux::gettid();
|
pid_t pid = os::Linux::gettid();
|
||||||
char fname[32];
|
char fname[32];
|
||||||
@ -742,7 +742,7 @@ static void *thread_native_entry(Thread *thread) {
|
|||||||
OSThread* osthread = thread->osthread();
|
OSThread* osthread = thread->osthread();
|
||||||
Monitor* sync = osthread->startThread_lock();
|
Monitor* sync = osthread->startThread_lock();
|
||||||
|
|
||||||
osthread->set_thread_id(os::current_thread_id());
|
osthread->set_thread_id(checked_cast<OSThread::thread_id_t>(os::current_thread_id()));
|
||||||
|
|
||||||
if (UseNUMA) {
|
if (UseNUMA) {
|
||||||
int lgrp_id = os::numa_get_group_id();
|
int lgrp_id = os::numa_get_group_id();
|
||||||
@ -1265,7 +1265,7 @@ void os::Linux::capture_initial_stack(size_t max_size) {
|
|||||||
// by email from Hans Boehm. /proc/self/stat begins with current pid,
|
// by email from Hans Boehm. /proc/self/stat begins with current pid,
|
||||||
// followed by command name surrounded by parentheses, state, etc.
|
// followed by command name surrounded by parentheses, state, etc.
|
||||||
char stat[2048];
|
char stat[2048];
|
||||||
int statlen;
|
size_t statlen;
|
||||||
|
|
||||||
fp = os::fopen("/proc/self/stat", "r");
|
fp = os::fopen("/proc/self/stat", "r");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
@ -1474,7 +1474,7 @@ bool os::dll_address_to_function_name(address addr, char *buf,
|
|||||||
if (!(demangle && Decoder::demangle(dlinfo.dli_sname, buf, buflen))) {
|
if (!(demangle && Decoder::demangle(dlinfo.dli_sname, buf, buflen))) {
|
||||||
jio_snprintf(buf, buflen, "%s", dlinfo.dli_sname);
|
jio_snprintf(buf, buflen, "%s", dlinfo.dli_sname);
|
||||||
}
|
}
|
||||||
if (offset != nullptr) *offset = addr - (address)dlinfo.dli_saddr;
|
if (offset != nullptr) *offset = pointer_delta_as_int(addr, (address)dlinfo.dli_saddr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// no matching symbol so try for just file info
|
// no matching symbol so try for just file info
|
||||||
@ -1502,7 +1502,7 @@ bool os::dll_address_to_library_name(address addr, char* buf,
|
|||||||
jio_snprintf(buf, buflen, "%s", dlinfo.dli_fname);
|
jio_snprintf(buf, buflen, "%s", dlinfo.dli_fname);
|
||||||
}
|
}
|
||||||
if (dlinfo.dli_fbase != nullptr && offset != nullptr) {
|
if (dlinfo.dli_fbase != nullptr && offset != nullptr) {
|
||||||
*offset = addr - (address)dlinfo.dli_fbase;
|
*offset = pointer_delta_as_int(addr, (address)dlinfo.dli_fbase);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1601,14 +1601,14 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Elf32_Ehdr elf_head;
|
Elf32_Ehdr elf_head;
|
||||||
int diag_msg_max_length=ebuflen-strlen(ebuf);
|
size_t prefix_len = strlen(ebuf);
|
||||||
char* diag_msg_buf=ebuf+strlen(ebuf);
|
ssize_t diag_msg_max_length = ebuflen - prefix_len;
|
||||||
|
if (diag_msg_max_length <= 0) {
|
||||||
if (diag_msg_max_length==0) {
|
|
||||||
// No more space in ebuf for additional diagnostics message
|
// No more space in ebuf for additional diagnostics message
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* diag_msg_buf = ebuf + prefix_len;
|
||||||
|
|
||||||
int file_descriptor= ::open(filename, O_RDONLY | O_NONBLOCK);
|
int file_descriptor= ::open(filename, O_RDONLY | O_NONBLOCK);
|
||||||
|
|
||||||
@ -1891,7 +1891,7 @@ static bool _print_ascii_file(const char* filename, outputStream* st, unsigned*
|
|||||||
}
|
}
|
||||||
|
|
||||||
char buf[33];
|
char buf[33];
|
||||||
int bytes;
|
ssize_t bytes;
|
||||||
buf[32] = '\0';
|
buf[32] = '\0';
|
||||||
unsigned lines = 0;
|
unsigned lines = 0;
|
||||||
while ((bytes = ::read(fd, buf, sizeof(buf)-1)) > 0) {
|
while ((bytes = ::read(fd, buf, sizeof(buf)-1)) > 0) {
|
||||||
@ -2382,7 +2382,7 @@ void os::Linux::print_steal_info(outputStream* st) {
|
|||||||
uint64_t total_ticks_difference = pticks.total - initial_total_ticks;
|
uint64_t total_ticks_difference = pticks.total - initial_total_ticks;
|
||||||
double steal_ticks_perc = 0.0;
|
double steal_ticks_perc = 0.0;
|
||||||
if (total_ticks_difference != 0) {
|
if (total_ticks_difference != 0) {
|
||||||
steal_ticks_perc = (double) steal_ticks_difference / total_ticks_difference;
|
steal_ticks_perc = (double) steal_ticks_difference / (double)total_ticks_difference;
|
||||||
}
|
}
|
||||||
st->print_cr("Steal ticks since vm start: " UINT64_FORMAT, steal_ticks_difference);
|
st->print_cr("Steal ticks since vm start: " UINT64_FORMAT, steal_ticks_difference);
|
||||||
st->print_cr("Steal ticks percentage since vm start:%7.3f", steal_ticks_perc);
|
st->print_cr("Steal ticks percentage since vm start:%7.3f", steal_ticks_perc);
|
||||||
@ -2424,7 +2424,7 @@ static bool print_model_name_and_flags(outputStream* st, char* buf, size_t bufle
|
|||||||
if (fp) {
|
if (fp) {
|
||||||
bool model_name_printed = false;
|
bool model_name_printed = false;
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
if (fgets(buf, buflen, fp)) {
|
if (fgets(buf, (int)buflen, fp)) {
|
||||||
// Assume model name comes before flags
|
// Assume model name comes before flags
|
||||||
if (strstr(buf, "model name") != nullptr) {
|
if (strstr(buf, "model name") != nullptr) {
|
||||||
if (!model_name_printed) {
|
if (!model_name_printed) {
|
||||||
@ -2667,7 +2667,7 @@ void os::jvm_path(char *buf, jint buflen) {
|
|||||||
|
|
||||||
// determine if this is a legacy image or modules image
|
// determine if this is a legacy image or modules image
|
||||||
// modules image doesn't have "jre" subdirectory
|
// modules image doesn't have "jre" subdirectory
|
||||||
len = strlen(buf);
|
len = checked_cast<int>(strlen(buf));
|
||||||
assert(len < buflen, "Ran out of buffer room");
|
assert(len < buflen, "Ran out of buffer room");
|
||||||
jrelib_p = buf + len;
|
jrelib_p = buf + len;
|
||||||
snprintf(jrelib_p, buflen-len, "/jre/lib");
|
snprintf(jrelib_p, buflen-len, "/jre/lib");
|
||||||
@ -2677,7 +2677,7 @@ void os::jvm_path(char *buf, jint buflen) {
|
|||||||
|
|
||||||
if (0 == access(buf, F_OK)) {
|
if (0 == access(buf, F_OK)) {
|
||||||
// Use current module name "libjvm.so"
|
// Use current module name "libjvm.so"
|
||||||
len = strlen(buf);
|
len = (int)strlen(buf);
|
||||||
snprintf(buf + len, buflen-len, "/hotspot/libjvm.so");
|
snprintf(buf + len, buflen-len, "/hotspot/libjvm.so");
|
||||||
} else {
|
} else {
|
||||||
// Go back to path of .so
|
// Go back to path of .so
|
||||||
@ -2970,7 +2970,7 @@ char *os::scan_pages(char *start, char* end, page_info* page_expected,
|
|||||||
|
|
||||||
int os::Linux::sched_getcpu_syscall(void) {
|
int os::Linux::sched_getcpu_syscall(void) {
|
||||||
unsigned int cpu = 0;
|
unsigned int cpu = 0;
|
||||||
int retval = -1;
|
long retval = -1;
|
||||||
|
|
||||||
#if defined(IA32)
|
#if defined(IA32)
|
||||||
#ifndef SYS_getcpu
|
#ifndef SYS_getcpu
|
||||||
@ -2989,7 +2989,7 @@ int os::Linux::sched_getcpu_syscall(void) {
|
|||||||
retval = vgetcpu(&cpu, nullptr, nullptr);
|
retval = vgetcpu(&cpu, nullptr, nullptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return (retval == -1) ? retval : cpu;
|
return (retval == -1) ? -1 : cpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
void os::Linux::sched_getcpu_init() {
|
void os::Linux::sched_getcpu_init() {
|
||||||
@ -3142,30 +3142,30 @@ void os::Linux::rebuild_nindex_to_node_map() {
|
|||||||
// rebuild_cpu_to_node_map() constructs a table mapping cpud id to node id.
|
// rebuild_cpu_to_node_map() constructs a table mapping cpud id to node id.
|
||||||
// The table is later used in get_node_by_cpu().
|
// The table is later used in get_node_by_cpu().
|
||||||
void os::Linux::rebuild_cpu_to_node_map() {
|
void os::Linux::rebuild_cpu_to_node_map() {
|
||||||
const size_t NCPUS = 32768; // Since the buffer size computation is very obscure
|
const int NCPUS = 32768; // Since the buffer size computation is very obscure
|
||||||
// in libnuma (possible values are starting from 16,
|
// in libnuma (possible values are starting from 16,
|
||||||
// and continuing up with every other power of 2, but less
|
// and continuing up with every other power of 2, but less
|
||||||
// than the maximum number of CPUs supported by kernel), and
|
// than the maximum number of CPUs supported by kernel), and
|
||||||
// is a subject to change (in libnuma version 2 the requirements
|
// is a subject to change (in libnuma version 2 the requirements
|
||||||
// are more reasonable) we'll just hardcode the number they use
|
// are more reasonable) we'll just hardcode the number they use
|
||||||
// in the library.
|
// in the library.
|
||||||
const size_t BitsPerCLong = sizeof(long) * CHAR_BIT;
|
constexpr int BitsPerCLong = (int)sizeof(long) * CHAR_BIT;
|
||||||
|
|
||||||
size_t cpu_num = processor_count();
|
int cpu_num = processor_count();
|
||||||
size_t cpu_map_size = NCPUS / BitsPerCLong;
|
int cpu_map_size = NCPUS / BitsPerCLong;
|
||||||
size_t cpu_map_valid_size =
|
int cpu_map_valid_size =
|
||||||
MIN2((cpu_num + BitsPerCLong - 1) / BitsPerCLong, cpu_map_size);
|
MIN2((cpu_num + BitsPerCLong - 1) / BitsPerCLong, cpu_map_size);
|
||||||
|
|
||||||
cpu_to_node()->clear();
|
cpu_to_node()->clear();
|
||||||
cpu_to_node()->at_grow(cpu_num - 1);
|
cpu_to_node()->at_grow(cpu_num - 1);
|
||||||
|
|
||||||
size_t node_num = get_existing_num_nodes();
|
int node_num = get_existing_num_nodes();
|
||||||
|
|
||||||
int distance = 0;
|
int distance = 0;
|
||||||
int closest_distance = INT_MAX;
|
int closest_distance = INT_MAX;
|
||||||
int closest_node = 0;
|
int closest_node = 0;
|
||||||
unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size, mtInternal);
|
unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size, mtInternal);
|
||||||
for (size_t i = 0; i < node_num; i++) {
|
for (int i = 0; i < node_num; i++) {
|
||||||
// Check if node is configured (not a memory-less node). If it is not, find
|
// Check if node is configured (not a memory-less node). If it is not, find
|
||||||
// the closest configured node. Check also if node is bound, i.e. it's allowed
|
// the closest configured node. Check also if node is bound, i.e. it's allowed
|
||||||
// to allocate memory from the node. If it's not allowed, map cpus in that node
|
// to allocate memory from the node. If it's not allowed, map cpus in that node
|
||||||
@ -3176,7 +3176,7 @@ void os::Linux::rebuild_cpu_to_node_map() {
|
|||||||
// Check distance from all remaining nodes in the system. Ignore distance
|
// Check distance from all remaining nodes in the system. Ignore distance
|
||||||
// from itself, from another non-configured node, and from another non-bound
|
// from itself, from another non-configured node, and from another non-bound
|
||||||
// node.
|
// node.
|
||||||
for (size_t m = 0; m < node_num; m++) {
|
for (int m = 0; m < node_num; m++) {
|
||||||
if (m != i &&
|
if (m != i &&
|
||||||
is_node_in_configured_nodes(nindex_to_node()->at(m)) &&
|
is_node_in_configured_nodes(nindex_to_node()->at(m)) &&
|
||||||
is_node_in_bound_nodes(nindex_to_node()->at(m))) {
|
is_node_in_bound_nodes(nindex_to_node()->at(m))) {
|
||||||
@ -3198,10 +3198,10 @@ void os::Linux::rebuild_cpu_to_node_map() {
|
|||||||
// Get cpus from the original node and map them to the closest node. If node
|
// Get cpus from the original node and map them to the closest node. If node
|
||||||
// is a configured node (not a memory-less node), then original node and
|
// is a configured node (not a memory-less node), then original node and
|
||||||
// closest node are the same.
|
// closest node are the same.
|
||||||
if (numa_node_to_cpus(nindex_to_node()->at(i), cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) {
|
if (numa_node_to_cpus(nindex_to_node()->at(i), cpu_map, cpu_map_size * (int)sizeof(unsigned long)) != -1) {
|
||||||
for (size_t j = 0; j < cpu_map_valid_size; j++) {
|
for (int j = 0; j < cpu_map_valid_size; j++) {
|
||||||
if (cpu_map[j] != 0) {
|
if (cpu_map[j] != 0) {
|
||||||
for (size_t k = 0; k < BitsPerCLong; k++) {
|
for (int k = 0; k < BitsPerCLong; k++) {
|
||||||
if (cpu_map[j] & (1UL << k)) {
|
if (cpu_map[j] & (1UL << k)) {
|
||||||
int cpu_index = j * BitsPerCLong + k;
|
int cpu_index = j * BitsPerCLong + k;
|
||||||
|
|
||||||
@ -3286,7 +3286,7 @@ static address get_stack_commited_bottom(address bottom, size_t size) {
|
|||||||
address ntop = bottom + size;
|
address ntop = bottom + size;
|
||||||
|
|
||||||
size_t page_sz = os::vm_page_size();
|
size_t page_sz = os::vm_page_size();
|
||||||
unsigned pages = size / page_sz;
|
unsigned pages = checked_cast<unsigned>(size / page_sz);
|
||||||
|
|
||||||
unsigned char vec[1];
|
unsigned char vec[1];
|
||||||
unsigned imin = 1, imax = pages + 1, imid;
|
unsigned imin = 1, imax = pages + 1, imid;
|
||||||
@ -3336,21 +3336,21 @@ bool os::committed_in_range(address start, size_t size, address& committed_start
|
|||||||
vec[stripe] = 'X';
|
vec[stripe] = 'X';
|
||||||
|
|
||||||
const size_t page_sz = os::vm_page_size();
|
const size_t page_sz = os::vm_page_size();
|
||||||
size_t pages = size / page_sz;
|
uintx pages = size / page_sz;
|
||||||
|
|
||||||
assert(is_aligned(start, page_sz), "Start address must be page aligned");
|
assert(is_aligned(start, page_sz), "Start address must be page aligned");
|
||||||
assert(is_aligned(size, page_sz), "Size must be page aligned");
|
assert(is_aligned(size, page_sz), "Size must be page aligned");
|
||||||
|
|
||||||
committed_start = nullptr;
|
committed_start = nullptr;
|
||||||
|
|
||||||
int loops = (pages + stripe - 1) / stripe;
|
int loops = checked_cast<int>((pages + stripe - 1) / stripe);
|
||||||
int committed_pages = 0;
|
int committed_pages = 0;
|
||||||
address loop_base = start;
|
address loop_base = start;
|
||||||
bool found_range = false;
|
bool found_range = false;
|
||||||
|
|
||||||
for (int index = 0; index < loops && !found_range; index ++) {
|
for (int index = 0; index < loops && !found_range; index ++) {
|
||||||
assert(pages > 0, "Nothing to do");
|
assert(pages > 0, "Nothing to do");
|
||||||
int pages_to_query = (pages >= stripe) ? stripe : pages;
|
uintx pages_to_query = (pages >= stripe) ? stripe : pages;
|
||||||
pages -= pages_to_query;
|
pages -= pages_to_query;
|
||||||
|
|
||||||
// Get stable read
|
// Get stable read
|
||||||
@ -3366,7 +3366,7 @@ bool os::committed_in_range(address start, size_t size, address& committed_start
|
|||||||
assert(vec[stripe] == 'X', "overflow guard");
|
assert(vec[stripe] == 'X', "overflow guard");
|
||||||
assert(mincore_return_value == 0, "Range must be valid");
|
assert(mincore_return_value == 0, "Range must be valid");
|
||||||
// Process this stripe
|
// Process this stripe
|
||||||
for (int vecIdx = 0; vecIdx < pages_to_query; vecIdx ++) {
|
for (uintx vecIdx = 0; vecIdx < pages_to_query; vecIdx ++) {
|
||||||
if ((vec[vecIdx] & 0x01) == 0) { // not committed
|
if ((vec[vecIdx] & 0x01) == 0) { // not committed
|
||||||
// End of current contiguous region
|
// End of current contiguous region
|
||||||
if (committed_start != nullptr) {
|
if (committed_start != nullptr) {
|
||||||
@ -4395,13 +4395,13 @@ static void check_pax(void) {
|
|||||||
void os::init(void) {
|
void os::init(void) {
|
||||||
char dummy; // used to get a guess on initial stack address
|
char dummy; // used to get a guess on initial stack address
|
||||||
|
|
||||||
clock_tics_per_sec = sysconf(_SC_CLK_TCK);
|
clock_tics_per_sec = checked_cast<int>(sysconf(_SC_CLK_TCK));
|
||||||
int sys_pg_size = sysconf(_SC_PAGESIZE);
|
int sys_pg_size = checked_cast<int>(sysconf(_SC_PAGESIZE));
|
||||||
if (sys_pg_size < 0) {
|
if (sys_pg_size < 0) {
|
||||||
fatal("os_linux.cpp: os::init: sysconf failed (%s)",
|
fatal("os_linux.cpp: os::init: sysconf failed (%s)",
|
||||||
os::strerror(errno));
|
os::strerror(errno));
|
||||||
}
|
}
|
||||||
size_t page_size = (size_t) sys_pg_size;
|
size_t page_size = sys_pg_size;
|
||||||
OSInfo::set_vm_page_size(page_size);
|
OSInfo::set_vm_page_size(page_size);
|
||||||
OSInfo::set_vm_allocation_granularity(page_size);
|
OSInfo::set_vm_allocation_granularity(page_size);
|
||||||
if (os::vm_page_size() == 0) {
|
if (os::vm_page_size() == 0) {
|
||||||
@ -4745,7 +4745,7 @@ static int get_active_processor_count() {
|
|||||||
// Note: keep this function, with its CPU_xx macros, *outside* the os namespace (see JDK-8289477).
|
// Note: keep this function, with its CPU_xx macros, *outside* the os namespace (see JDK-8289477).
|
||||||
cpu_set_t cpus; // can represent at most 1024 (CPU_SETSIZE) processors
|
cpu_set_t cpus; // can represent at most 1024 (CPU_SETSIZE) processors
|
||||||
cpu_set_t* cpus_p = &cpus;
|
cpu_set_t* cpus_p = &cpus;
|
||||||
int cpus_size = sizeof(cpu_set_t);
|
size_t cpus_size = sizeof(cpu_set_t);
|
||||||
|
|
||||||
int configured_cpus = os::processor_count(); // upper bound on available cpus
|
int configured_cpus = os::processor_count(); // upper bound on available cpus
|
||||||
int cpu_count = 0;
|
int cpu_count = 0;
|
||||||
@ -4769,7 +4769,7 @@ static int get_active_processor_count() {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// failed to allocate so fallback to online cpus
|
// failed to allocate so fallback to online cpus
|
||||||
int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
|
int online_cpus = checked_cast<int>(::sysconf(_SC_NPROCESSORS_ONLN));
|
||||||
log_trace(os)("active_processor_count: "
|
log_trace(os)("active_processor_count: "
|
||||||
"CPU_ALLOC failed (%s) - using "
|
"CPU_ALLOC failed (%s) - using "
|
||||||
"online processor count: %d",
|
"online processor count: %d",
|
||||||
@ -4801,7 +4801,7 @@ static int get_active_processor_count() {
|
|||||||
log_trace(os)("active_processor_count: sched_getaffinity processor count: %d", cpu_count);
|
log_trace(os)("active_processor_count: sched_getaffinity processor count: %d", cpu_count);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cpu_count = ::sysconf(_SC_NPROCESSORS_ONLN);
|
cpu_count = checked_cast<int>(::sysconf(_SC_NPROCESSORS_ONLN));
|
||||||
warning("sched_getaffinity failed (%s)- using online processor count (%d) "
|
warning("sched_getaffinity failed (%s)- using online processor count (%d) "
|
||||||
"which may exceed available processors", os::strerror(errno), cpu_count);
|
"which may exceed available processors", os::strerror(errno), cpu_count);
|
||||||
}
|
}
|
||||||
@ -5163,7 +5163,7 @@ static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time) {
|
|||||||
pid_t tid = thread->osthread()->thread_id();
|
pid_t tid = thread->osthread()->thread_id();
|
||||||
char *s;
|
char *s;
|
||||||
char stat[2048];
|
char stat[2048];
|
||||||
int statlen;
|
size_t statlen;
|
||||||
char proc_name[64];
|
char proc_name[64];
|
||||||
int count;
|
int count;
|
||||||
long sys_time, user_time;
|
long sys_time, user_time;
|
||||||
@ -5309,7 +5309,7 @@ int os::get_core_path(char* buffer, size_t bufferSize) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return strlen(buffer);
|
return checked_cast<int>(strlen(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool os::start_debugging(char *buf, int buflen) {
|
bool os::start_debugging(char *buf, int buflen) {
|
||||||
@ -5444,9 +5444,9 @@ static inline struct timespec get_mtime(const char* filename) {
|
|||||||
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
||||||
struct timespec filetime1 = get_mtime(file1);
|
struct timespec filetime1 = get_mtime(file1);
|
||||||
struct timespec filetime2 = get_mtime(file2);
|
struct timespec filetime2 = get_mtime(file2);
|
||||||
int diff = filetime1.tv_sec - filetime2.tv_sec;
|
int diff = primitive_compare(filetime1.tv_sec, filetime2.tv_sec);
|
||||||
if (diff == 0) {
|
if (diff == 0) {
|
||||||
return filetime1.tv_nsec - filetime2.tv_nsec;
|
diff = primitive_compare(filetime1.tv_nsec, filetime2.tv_nsec);
|
||||||
}
|
}
|
||||||
return diff;
|
return diff;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +232,7 @@ static double get_cpu_load(int which_logical_cpu, CPUPerfCounters* counters, dou
|
|||||||
*/
|
*/
|
||||||
static int SCANF_ARGS(2, 0) vread_statdata(const char* procfile, _SCANFMT_ const char* fmt, va_list args) {
|
static int SCANF_ARGS(2, 0) vread_statdata(const char* procfile, _SCANFMT_ const char* fmt, va_list args) {
|
||||||
FILE*f;
|
FILE*f;
|
||||||
int n;
|
ssize_t n;
|
||||||
char buf[2048];
|
char buf[2048];
|
||||||
|
|
||||||
if ((f = os::fopen(procfile, "r")) == nullptr) {
|
if ((f = os::fopen(procfile, "r")) == nullptr) {
|
||||||
@ -382,12 +382,12 @@ static double get_cpu_load(int which_logical_cpu, CPUPerfCounters* counters, dou
|
|||||||
} else if (tdiff < (udiff + kdiff)) {
|
} else if (tdiff < (udiff + kdiff)) {
|
||||||
tdiff = udiff + kdiff;
|
tdiff = udiff + kdiff;
|
||||||
}
|
}
|
||||||
*pkernelLoad = (kdiff / (double)tdiff);
|
*pkernelLoad = ((double)kdiff / (double)tdiff);
|
||||||
// BUG9044876, normalize return values to sane values
|
// BUG9044876, normalize return values to sane values
|
||||||
*pkernelLoad = MAX2<double>(*pkernelLoad, 0.0);
|
*pkernelLoad = MAX2<double>(*pkernelLoad, 0.0);
|
||||||
*pkernelLoad = MIN2<double>(*pkernelLoad, 1.0);
|
*pkernelLoad = MIN2<double>(*pkernelLoad, 1.0);
|
||||||
|
|
||||||
user_load = (udiff / (double)tdiff);
|
user_load = ((double)udiff / (double)tdiff);
|
||||||
user_load = MAX2<double>(user_load, 0.0);
|
user_load = MAX2<double>(user_load, 0.0);
|
||||||
user_load = MIN2<double>(user_load, 1.0);
|
user_load = MIN2<double>(user_load, 1.0);
|
||||||
|
|
||||||
@ -473,7 +473,7 @@ static int perf_context_switch_rate(double* rate) {
|
|||||||
if (d == 0) {
|
if (d == 0) {
|
||||||
*rate = lastRate;
|
*rate = lastRate;
|
||||||
} else if (get_noof_context_switches(&sw) == 0) {
|
} else if (get_noof_context_switches(&sw) == 0) {
|
||||||
*rate = ( (double)(sw - lastSwitches) / d ) * 1000;
|
*rate = ( (double)(sw - lastSwitches) / (double)d ) * 1000;
|
||||||
lastRate = *rate;
|
lastRate = *rate;
|
||||||
lastSwitches = sw;
|
lastSwitches = sw;
|
||||||
if (bootTime != 0) {
|
if (bootTime != 0) {
|
||||||
|
@ -56,12 +56,12 @@ enum membarrier_cmd {
|
|||||||
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = (1 << 4),
|
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = (1 << 4),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int membarrier(int cmd, unsigned int flags, int cpu_id) {
|
static long membarrier(int cmd, unsigned int flags, int cpu_id) {
|
||||||
return syscall(SYS_membarrier, cmd, flags, cpu_id); // cpu_id only on >= 5.10
|
return syscall(SYS_membarrier, cmd, flags, cpu_id); // cpu_id only on >= 5.10
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LinuxSystemMemoryBarrier::initialize() {
|
bool LinuxSystemMemoryBarrier::initialize() {
|
||||||
int ret = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);
|
long ret = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
log_info(os)("MEMBARRIER_CMD_QUERY unsupported");
|
log_info(os)("MEMBARRIER_CMD_QUERY unsupported");
|
||||||
return false;
|
return false;
|
||||||
@ -78,6 +78,6 @@ bool LinuxSystemMemoryBarrier::initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LinuxSystemMemoryBarrier::emit() {
|
void LinuxSystemMemoryBarrier::emit() {
|
||||||
int s = membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED, 0, 0);
|
long s = membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED, 0, 0);
|
||||||
guarantee_with_errno(s >= 0, "MEMBARRIER_CMD_PRIVATE_EXPEDITED failed");
|
guarantee_with_errno(s >= 0, "MEMBARRIER_CMD_PRIVATE_EXPEDITED failed");
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int futex(volatile int *addr, int futex_op, int op_arg) {
|
static long futex(volatile int *addr, int futex_op, int op_arg) {
|
||||||
return syscall(SYS_futex, addr, futex_op, op_arg, nullptr, nullptr, 0);
|
return syscall(SYS_futex, addr, futex_op, op_arg, nullptr, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,9 +51,9 @@ void LinuxWaitBarrier::arm(int barrier_tag) {
|
|||||||
void LinuxWaitBarrier::disarm() {
|
void LinuxWaitBarrier::disarm() {
|
||||||
assert(_futex_barrier != 0, "Should be armed/non-zero.");
|
assert(_futex_barrier != 0, "Should be armed/non-zero.");
|
||||||
_futex_barrier = 0;
|
_futex_barrier = 0;
|
||||||
int s = futex(&_futex_barrier,
|
long s = futex(&_futex_barrier,
|
||||||
FUTEX_WAKE_PRIVATE,
|
FUTEX_WAKE_PRIVATE,
|
||||||
INT_MAX /* wake a max of this many threads */);
|
INT_MAX /* wake a max of this many threads */);
|
||||||
guarantee_with_errno(s > -1, "futex FUTEX_WAKE failed");
|
guarantee_with_errno(s > -1, "futex FUTEX_WAKE failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,9 +65,9 @@ void LinuxWaitBarrier::wait(int barrier_tag) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
int s = futex(&_futex_barrier,
|
long s = futex(&_futex_barrier,
|
||||||
FUTEX_WAIT_PRIVATE,
|
FUTEX_WAIT_PRIVATE,
|
||||||
barrier_tag /* should be this tag */);
|
barrier_tag /* should be this tag */);
|
||||||
guarantee_with_errno((s == 0) ||
|
guarantee_with_errno((s == 0) ||
|
||||||
(s == -1 && errno == EAGAIN) ||
|
(s == -1 && errno == EAGAIN) ||
|
||||||
(s == -1 && errno == EINTR),
|
(s == -1 && errno == EINTR),
|
||||||
|
@ -445,7 +445,7 @@ void os::Posix::print_load_average(outputStream* st) {
|
|||||||
// for reboot at least on my test machines
|
// for reboot at least on my test machines
|
||||||
void os::Posix::print_uptime_info(outputStream* st) {
|
void os::Posix::print_uptime_info(outputStream* st) {
|
||||||
int bootsec = -1;
|
int bootsec = -1;
|
||||||
int currsec = time(nullptr);
|
time_t currsec = time(nullptr);
|
||||||
struct utmpx* ent;
|
struct utmpx* ent;
|
||||||
setutxent();
|
setutxent();
|
||||||
while ((ent = getutxent())) {
|
while ((ent = getutxent())) {
|
||||||
@ -456,7 +456,7 @@ void os::Posix::print_uptime_info(outputStream* st) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bootsec != -1) {
|
if (bootsec != -1) {
|
||||||
os::print_dhm(st, "OS uptime:", (long) (currsec-bootsec));
|
os::print_dhm(st, "OS uptime:", currsec-bootsec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -799,20 +799,20 @@ int os::socket_close(int fd) {
|
|||||||
return ::close(fd);
|
return ::close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
|
ssize_t os::recv(int fd, char* buf, size_t nBytes, uint flags) {
|
||||||
RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, flags));
|
RESTARTABLE_RETURN_SSIZE_T(::recv(fd, buf, nBytes, flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::send(int fd, char* buf, size_t nBytes, uint flags) {
|
ssize_t os::send(int fd, char* buf, size_t nBytes, uint flags) {
|
||||||
RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
|
RESTARTABLE_RETURN_SSIZE_T(::send(fd, buf, nBytes, flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
|
ssize_t os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
|
||||||
return os::send(fd, buf, nBytes, flags);
|
return os::send(fd, buf, nBytes, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::connect(int fd, struct sockaddr* him, socklen_t len) {
|
ssize_t os::connect(int fd, struct sockaddr* him, socklen_t len) {
|
||||||
RESTARTABLE_RETURN_INT(::connect(fd, him, len));
|
RESTARTABLE_RETURN_SSIZE_T(::connect(fd, him, len));
|
||||||
}
|
}
|
||||||
|
|
||||||
void os::exit(int num) {
|
void os::exit(int num) {
|
||||||
@ -1208,7 +1208,7 @@ void os::Posix::init(void) {
|
|||||||
#if defined(_ALLBSD_SOURCE)
|
#if defined(_ALLBSD_SOURCE)
|
||||||
clock_tics_per_sec = CLK_TCK;
|
clock_tics_per_sec = CLK_TCK;
|
||||||
#else
|
#else
|
||||||
clock_tics_per_sec = sysconf(_SC_CLK_TCK);
|
clock_tics_per_sec = checked_cast<int>(sysconf(_SC_CLK_TCK));
|
||||||
#endif
|
#endif
|
||||||
// NOTE: no logging available when this is called. Put logging
|
// NOTE: no logging available when this is called. Put logging
|
||||||
// statements in init_2().
|
// statements in init_2().
|
||||||
@ -1332,7 +1332,7 @@ static jlong millis_to_nanos_bounded(jlong millis) {
|
|||||||
|
|
||||||
static void to_abstime(timespec* abstime, jlong timeout,
|
static void to_abstime(timespec* abstime, jlong timeout,
|
||||||
bool isAbsolute, bool isRealtime) {
|
bool isAbsolute, bool isRealtime) {
|
||||||
DEBUG_ONLY(int max_secs = MAX_SECS;)
|
DEBUG_ONLY(time_t max_secs = MAX_SECS;)
|
||||||
|
|
||||||
if (timeout < 0) {
|
if (timeout < 0) {
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
@ -1414,7 +1414,7 @@ void os::javaTimeNanos_info(jvmtiTimerInfo *info_ptr) {
|
|||||||
|
|
||||||
// Time since start-up in seconds to a fine granularity.
|
// Time since start-up in seconds to a fine granularity.
|
||||||
double os::elapsedTime() {
|
double os::elapsedTime() {
|
||||||
return ((double)os::elapsed_counter()) / os::elapsed_frequency(); // nanosecond resolution
|
return ((double)os::elapsed_counter()) / (double)os::elapsed_frequency(); // nanosecond resolution
|
||||||
}
|
}
|
||||||
|
|
||||||
jlong os::elapsed_counter() {
|
jlong os::elapsed_counter() {
|
||||||
|
@ -44,8 +44,8 @@
|
|||||||
_result = _cmd; \
|
_result = _cmd; \
|
||||||
} while(((int)_result == OS_ERR) && (errno == EINTR))
|
} while(((int)_result == OS_ERR) && (errno == EINTR))
|
||||||
|
|
||||||
#define RESTARTABLE_RETURN_INT(_cmd) do { \
|
#define RESTARTABLE_RETURN_SSIZE_T(_cmd) do { \
|
||||||
int _result; \
|
ssize_t _result; \
|
||||||
RESTARTABLE(_cmd, _result); \
|
RESTARTABLE(_cmd, _result); \
|
||||||
return _result; \
|
return _result; \
|
||||||
} while(false)
|
} while(false)
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "suspendResume_posix.hpp"
|
#include "suspendResume_posix.hpp"
|
||||||
#include "utilities/events.hpp"
|
#include "utilities/events.hpp"
|
||||||
#include "utilities/ostream.hpp"
|
#include "utilities/ostream.hpp"
|
||||||
|
#include "utilities/parseInteger.hpp"
|
||||||
#include "utilities/vmError.hpp"
|
#include "utilities/vmError.hpp"
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -681,7 +682,7 @@ static void UserHandler(int sig, siginfo_t* siginfo, void* context) {
|
|||||||
|
|
||||||
static void print_signal_handler_name(outputStream* os, address handler, char* buf, size_t buflen) {
|
static void print_signal_handler_name(outputStream* os, address handler, char* buf, size_t buflen) {
|
||||||
// We demangle, but omit arguments - signal handlers should have always the same prototype.
|
// We demangle, but omit arguments - signal handlers should have always the same prototype.
|
||||||
os::print_function_and_library_name(os, handler, buf, buflen,
|
os::print_function_and_library_name(os, handler, buf, checked_cast<int>(buflen),
|
||||||
true, // shorten_path
|
true, // shorten_path
|
||||||
true, // demangle
|
true, // demangle
|
||||||
true // omit arguments
|
true // omit arguments
|
||||||
@ -1726,8 +1727,9 @@ int SR_initialize() {
|
|||||||
char *s;
|
char *s;
|
||||||
// Get signal number to use for suspend/resume
|
// Get signal number to use for suspend/resume
|
||||||
if ((s = ::getenv("_JAVA_SR_SIGNUM")) != 0) {
|
if ((s = ::getenv("_JAVA_SR_SIGNUM")) != 0) {
|
||||||
int sig = ::strtol(s, 0, 10);
|
int sig;
|
||||||
if (sig > MAX2(SIGSEGV, SIGBUS) && // See 4355769.
|
bool result = parse_integer(s, &sig);
|
||||||
|
if (result && sig > MAX2(SIGSEGV, SIGBUS) && // See 4355769.
|
||||||
sig < NSIG) { // Must be legal signal and fit into sigflags[].
|
sig < NSIG) { // Must be legal signal and fit into sigflags[].
|
||||||
PosixSignals::SR_signum = sig;
|
PosixSignals::SR_signum = sig;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1762,7 +1762,7 @@ static inline time_t get_mtime(const char* filename) {
|
|||||||
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
int os::compare_file_modified_times(const char* file1, const char* file2) {
|
||||||
time_t t1 = get_mtime(file1);
|
time_t t1 = get_mtime(file1);
|
||||||
time_t t2 = get_mtime(file2);
|
time_t t2 = get_mtime(file2);
|
||||||
return t1 - t2;
|
return primitive_compare(t1, t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void os::print_os_info_brief(outputStream* st) {
|
void os::print_os_info_brief(outputStream* st) {
|
||||||
@ -5608,19 +5608,19 @@ int os::socket_close(int fd) {
|
|||||||
return ::closesocket(fd);
|
return ::closesocket(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::connect(int fd, struct sockaddr* him, socklen_t len) {
|
ssize_t os::connect(int fd, struct sockaddr* him, socklen_t len) {
|
||||||
return ::connect(fd, him, len);
|
return ::connect(fd, him, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
|
ssize_t os::recv(int fd, char* buf, size_t nBytes, uint flags) {
|
||||||
return ::recv(fd, buf, (int)nBytes, flags);
|
return ::recv(fd, buf, (int)nBytes, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::send(int fd, char* buf, size_t nBytes, uint flags) {
|
ssize_t os::send(int fd, char* buf, size_t nBytes, uint flags) {
|
||||||
return ::send(fd, buf, (int)nBytes, flags);
|
return ::send(fd, buf, (int)nBytes, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
|
ssize_t os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
|
||||||
return ::send(fd, buf, (int)nBytes, flags);
|
return ::send(fd, buf, (int)nBytes, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,7 +463,7 @@ juint os::cpu_microcode_revision() {
|
|||||||
fp = os::fopen("/proc/cpuinfo", "r");
|
fp = os::fopen("/proc/cpuinfo", "r");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
char data[2048] = {0}; // lines should fit in 2K buf
|
char data[2048] = {0}; // lines should fit in 2K buf
|
||||||
size_t len = sizeof(data);
|
int len = (int)sizeof(data);
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
if (fgets(data, len, fp)) {
|
if (fgets(data, len, fp)) {
|
||||||
if (strstr(data, "microcode") != nullptr) {
|
if (strstr(data, "microcode") != nullptr) {
|
||||||
|
@ -886,10 +886,10 @@ class os: AllStatic {
|
|||||||
|
|
||||||
// SocketInterface (ex HPI SocketInterface )
|
// SocketInterface (ex HPI SocketInterface )
|
||||||
static int socket_close(int fd);
|
static int socket_close(int fd);
|
||||||
static int recv(int fd, char* buf, size_t nBytes, uint flags);
|
static ssize_t recv(int fd, char* buf, size_t nBytes, uint flags);
|
||||||
static int send(int fd, char* buf, size_t nBytes, uint flags);
|
static ssize_t send(int fd, char* buf, size_t nBytes, uint flags);
|
||||||
static int raw_send(int fd, char* buf, size_t nBytes, uint flags);
|
static ssize_t raw_send(int fd, char* buf, size_t nBytes, uint flags);
|
||||||
static int connect(int fd, struct sockaddr* him, socklen_t len);
|
static ssize_t connect(int fd, struct sockaddr* him, socklen_t len);
|
||||||
|
|
||||||
// Support for signals
|
// Support for signals
|
||||||
static void initialize_jdk_signal_support(TRAPS);
|
static void initialize_jdk_signal_support(TRAPS);
|
||||||
|
@ -1096,15 +1096,15 @@ networkStream::networkStream() : bufferedStream(1024*10, 1024*10) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int networkStream::read(char *buf, size_t len) {
|
ssize_t networkStream::read(char *buf, size_t len) {
|
||||||
return os::recv(_socket, buf, (int)len, 0);
|
return os::recv(_socket, buf, len, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void networkStream::flush() {
|
void networkStream::flush() {
|
||||||
if (size() != 0) {
|
if (size() != 0) {
|
||||||
int result = os::raw_send(_socket, (char *)base(), size(), 0);
|
ssize_t result = os::raw_send(_socket, (char *)base(), size(), 0);
|
||||||
assert(result != -1, "connection error");
|
assert(result != -1, "connection error");
|
||||||
assert(result == (int)size(), "didn't send enough data");
|
assert(result >= 0 && (size_t)result == size(), "didn't send enough data");
|
||||||
}
|
}
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
@ -1143,9 +1143,9 @@ bool networkStream::connect(const char *host, short port) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = os::connect(_socket, addr_info->ai_addr, (socklen_t)addr_info->ai_addrlen);
|
ssize_t conn = os::connect(_socket, addr_info->ai_addr, (socklen_t)addr_info->ai_addrlen);
|
||||||
freeaddrinfo(addr_info);
|
freeaddrinfo(addr_info);
|
||||||
return (ret >= 0);
|
return (conn >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -321,7 +321,7 @@ class networkStream : public bufferedStream {
|
|||||||
|
|
||||||
bool connect(const char *host, short port);
|
bool connect(const char *host, short port);
|
||||||
bool is_open() const { return _socket != -1; }
|
bool is_open() const { return _socket != -1; }
|
||||||
int read(char *buf, size_t len);
|
ssize_t read(char *buf, size_t len);
|
||||||
void close();
|
void close();
|
||||||
virtual void flush();
|
virtual void flush();
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user