提交 ec6f65d3 编写于 作者: J jcoomes

Merge

...@@ -3297,9 +3297,14 @@ bool os::is_interrupted(Thread* thread, bool clear_interrupted) { ...@@ -3297,9 +3297,14 @@ bool os::is_interrupted(Thread* thread, bool clear_interrupted) {
"possibility of dangling Thread pointer"); "possibility of dangling Thread pointer");
OSThread* osthread = thread->osthread(); OSThread* osthread = thread->osthread();
bool interrupted; bool interrupted = osthread->interrupted();
interrupted = osthread->interrupted(); // There is no synchronization between the setting of the interrupt
if (clear_interrupted == true) { // and it being cleared here. It is critical - see 6535709 - that
// we only clear the interrupt state, and reset the interrupt event,
// if we are going to report that we were indeed interrupted - else
// an interrupt can be "lost", leading to spurious wakeups or lost wakeups
// depending on the timing
if (interrupted && clear_interrupted) {
osthread->set_interrupted(false); osthread->set_interrupted(false);
ResetEvent(osthread->interrupt_event()); ResetEvent(osthread->interrupt_event());
} // Otherwise leave the interrupted state alone } // Otherwise leave the interrupted state alone
......
...@@ -1079,11 +1079,6 @@ bool os::set_boot_path(char fileSep, char pathSep) { ...@@ -1079,11 +1079,6 @@ bool os::set_boot_path(char fileSep, char pathSep) {
"%/lib/jsse.jar:" "%/lib/jsse.jar:"
"%/lib/jce.jar:" "%/lib/jce.jar:"
"%/lib/charsets.jar:" "%/lib/charsets.jar:"
// ## TEMPORARY hack to keep the legacy launcher working when
// ## only the boot module is installed (cf. j.l.ClassLoader)
"%/lib/modules/jdk.boot.jar:"
"%/classes"; "%/classes";
char* sysclasspath = format_boot_path(classpath_format, home, home_len, fileSep, pathSep); char* sysclasspath = format_boot_path(classpath_format, home, home_len, fileSep, pathSep);
if (sysclasspath == NULL) return false; if (sysclasspath == NULL) return false;
......
/* /*
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -65,7 +65,7 @@ class OSThread: public CHeapObj { ...@@ -65,7 +65,7 @@ class OSThread: public CHeapObj {
OSThreadStartFunc _start_proc; // Thread start routine OSThreadStartFunc _start_proc; // Thread start routine
void* _start_parm; // Thread start routine parameter void* _start_parm; // Thread start routine parameter
volatile ThreadState _state; // Thread state *hint* volatile ThreadState _state; // Thread state *hint*
jint _interrupted; // Thread.isInterrupted state volatile jint _interrupted; // Thread.isInterrupted state
// Note: _interrupted must be jint, so that Java intrinsics can access it. // Note: _interrupted must be jint, so that Java intrinsics can access it.
// The value stored there must be either 0 or 1. It must be possible // The value stored there must be either 0 or 1. It must be possible
...@@ -89,7 +89,7 @@ class OSThread: public CHeapObj { ...@@ -89,7 +89,7 @@ class OSThread: public CHeapObj {
void* start_parm() const { return _start_parm; } void* start_parm() const { return _start_parm; }
void set_start_parm(void* start_parm) { _start_parm = start_parm; } void set_start_parm(void* start_parm) { _start_parm = start_parm; }
bool interrupted() const { return _interrupted != 0; } volatile bool interrupted() const { return _interrupted != 0; }
void set_interrupted(bool z) { _interrupted = z ? 1 : 0; } void set_interrupted(bool z) { _interrupted = z ? 1 : 0; }
// Printing // Printing
......
...@@ -840,7 +840,7 @@ static inline uint64_t cast_uint64_t(size_t x) ...@@ -840,7 +840,7 @@ static inline uint64_t cast_uint64_t(size_t x)
/* OSThread */ \ /* OSThread */ \
/************/ \ /************/ \
\ \
nonstatic_field(OSThread, _interrupted, jint) \ volatile_nonstatic_field(OSThread, _interrupted, jint) \
\ \
/************************/ \ /************************/ \
/* OopMap and OopMapSet */ \ /* OopMap and OopMapSet */ \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册