--- a/hotspot/src/os/linux/vm/os_linux.hpp Fri Feb 22 10:16:51 2013 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.hpp Wed Feb 27 09:40:30 2013 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, 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
@@ -209,39 +209,27 @@
// for LinuxThreads are no longer needed.
class SuspendResume {
private:
- volatile int _suspend_action;
+ volatile int _suspend_action;
+ volatile jint _state;
+ public:
// values for suspend_action:
- #define SR_NONE (0x00)
- #define SR_SUSPEND (0x01) // suspend request
- #define SR_CONTINUE (0x02) // resume request
+ enum {
+ SR_NONE = 0x00,
+ SR_SUSPEND = 0x01, // suspend request
+ SR_CONTINUE = 0x02, // resume request
+ SR_SUSPENDED = 0x20 // values for _state: + SR_NONE
+ };
- volatile jint _state;
- // values for _state: + SR_NONE
- #define SR_SUSPENDED (0x20)
- public:
SuspendResume() { _suspend_action = SR_NONE; _state = SR_NONE; }
int suspend_action() const { return _suspend_action; }
void set_suspend_action(int x) { _suspend_action = x; }
// atomic updates for _state
- void set_suspended() {
- jint temp, temp2;
- do {
- temp = _state;
- temp2 = Atomic::cmpxchg(temp | SR_SUSPENDED, &_state, temp);
- } while (temp2 != temp);
- }
- void clear_suspended() {
- jint temp, temp2;
- do {
- temp = _state;
- temp2 = Atomic::cmpxchg(temp & ~SR_SUSPENDED, &_state, temp);
- } while (temp2 != temp);
- }
+ inline void set_suspended();
+ inline void clear_suspended();
bool is_suspended() { return _state & SR_SUSPENDED; }
- #undef SR_SUSPENDED
};
private: