src/hotspot/os/solaris/osThread_solaris.hpp
changeset 47216 71c04702a3d5
parent 47106 bed18a111b90
child 53244 9807daeb47c4
equal deleted inserted replaced
47215:4ebc2e2fb97c 47216:71c04702a3d5
       
     1 /*
       
     2  * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    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 
       
    25 #ifndef OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP
       
    26 #define OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP
       
    27 
       
    28 // This is embedded via include into the class OSThread
       
    29  public:
       
    30   typedef thread_t thread_id_t;
       
    31 
       
    32  private:
       
    33   uint     _lwp_id;            // lwp ID, only used with bound threads
       
    34   int      _native_priority;   // Saved native priority when starting
       
    35                                // a bound thread
       
    36   sigset_t _caller_sigmask;    // Caller's signal mask
       
    37   bool     _vm_created_thread; // true if the VM created this thread,
       
    38                                // false if primary thread or attached thread
       
    39  public:
       
    40   uint     lwp_id() const          { return _lwp_id; }
       
    41   int      native_priority() const { return _native_priority; }
       
    42 
       
    43   // Set and get state of _vm_created_thread flag
       
    44   void set_vm_created()           { _vm_created_thread = true; }
       
    45   bool is_vm_created()            { return _vm_created_thread; }
       
    46 
       
    47   // Methods to save/restore caller's signal mask
       
    48   sigset_t  caller_sigmask() const       { return _caller_sigmask; }
       
    49   void    set_caller_sigmask(sigset_t sigmask)  { _caller_sigmask = sigmask; }
       
    50 
       
    51 #ifndef PRODUCT
       
    52   // Used for debugging, return a unique integer for each thread.
       
    53   int thread_identifier() const   { return _thread_id; }
       
    54 #endif
       
    55 #ifdef ASSERT
       
    56   // On solaris reposition can fail in two ways:
       
    57   // 1: a mismatched pc, because signal is delivered too late, target thread
       
    58   //    is resumed.
       
    59   // 2: on a timeout where signal is lost, target thread is resumed.
       
    60   bool valid_reposition_failure() {
       
    61     // only 1 and 2 can happen and we can handle both of them
       
    62     return true;
       
    63   }
       
    64 #endif
       
    65   void set_lwp_id(uint id)           { _lwp_id = id; }
       
    66   void set_native_priority(int prio) { _native_priority = prio; }
       
    67 
       
    68  public:
       
    69   os::SuspendResume sr;
       
    70 
       
    71  private:
       
    72   ucontext_t* _ucontext;
       
    73 
       
    74  public:
       
    75   ucontext_t* ucontext() const { return _ucontext; }
       
    76   void set_ucontext(ucontext_t* ptr) { _ucontext = ptr; }
       
    77   static void SR_handler(Thread* thread, ucontext_t* uc);
       
    78 
       
    79   // ***************************************************************
       
    80   // Platform dependent initialization and cleanup
       
    81   // ***************************************************************
       
    82 
       
    83 private:
       
    84 
       
    85   void pd_initialize();
       
    86   void pd_destroy();
       
    87 
       
    88 #endif // OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP