13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 #include "precompiled.hpp" 25 #include "logging/logLevel.hpp" 26 #include "logging/logOutputList.hpp" 27 #include "memory/allocation.inline.hpp" 28 #include "runtime/atomic.hpp" 29 #include "runtime/orderAccess.hpp" 30 #include "utilities/globalDefinitions.hpp" 31 32 jint LogOutputList::increase_readers() { 33 jint result = Atomic::add(1, &_active_readers); 34 assert(_active_readers > 0, "Ensure we have consistent state"); 35 return result; 36 } 37 38 jint LogOutputList::decrease_readers() { 39 jint result = Atomic::add(-1, &_active_readers); 40 assert(result >= 0, "Ensure we have consistent state"); 41 return result; 42 } 43 44 void LogOutputList::wait_until_no_readers() const { 45 OrderAccess::storeload(); 46 while (_active_readers != 0) { 47 // Busy wait 48 } 49 } 50 51 void LogOutputList::set_output_level(LogOutput* output, LogLevelType level) { 52 LogOutputNode* node = find(output); 53 if (level == LogLevel::Off && node != NULL) { 54 remove_output(node); 55 } else if (level != LogLevel::Off && node == NULL) { 56 add_output(output, level); 57 } else if (node != NULL) { 58 update_output_level(node, level); 59 } | 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 #include "precompiled.hpp" 25 #include "logging/logLevel.hpp" 26 #include "logging/logOutputList.hpp" 27 #include "memory/allocation.inline.hpp" 28 #include "runtime/atomic.hpp" 29 #include "runtime/orderAccess.hpp" 30 #include "utilities/globalDefinitions.hpp" 31 32 jint LogOutputList::increase_readers() { 33 jint result = Atomic::add(&_active_readers, 1); 34 assert(_active_readers > 0, "Ensure we have consistent state"); 35 return result; 36 } 37 38 jint LogOutputList::decrease_readers() { 39 jint result = Atomic::add(&_active_readers, -1); 40 assert(result >= 0, "Ensure we have consistent state"); 41 return result; 42 } 43 44 void LogOutputList::wait_until_no_readers() const { 45 OrderAccess::storeload(); 46 while (_active_readers != 0) { 47 // Busy wait 48 } 49 } 50 51 void LogOutputList::set_output_level(LogOutput* output, LogLevelType level) { 52 LogOutputNode* node = find(output); 53 if (level == LogLevel::Off && node != NULL) { 54 remove_output(node); 55 } else if (level != LogLevel::Off && node == NULL) { 56 add_output(output, level); 57 } else if (node != NULL) { 58 update_output_level(node, level); 59 } |