thread.cc revision e27955ca3ca960928d4dbd6cb79711fce06950b3
1e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes/* 2e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * Copyright (C) 2008 The Android Open Source Project 3e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * 4e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * you may not use this file except in compliance with the License. 6e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * You may obtain a copy of the License at 7e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * 8e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * 10e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * Unless required by applicable law or agreed to in writing, software 11e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * See the License for the specific language governing permissions and 14e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * limitations under the License. 15e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes */ 16e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 17e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes#ifndef ART_SRC_SIGNAL_CATCHER_H_ 18e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes#define ART_SRC_SIGNAL_CATCHER_H_ 19e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 20e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes#include <pthread.h> 21e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 22e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughesnamespace art { 23e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 24e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughesclass Runtime; 25e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughesclass Thread; 26e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 27e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes/* 28e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * A thread that catches signals and does something useful. For 29e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * example, when a SIGQUIT (Ctrl-\) arrives, we suspend and dump the 30e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes * status of all threads. 31e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes */ 32e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughesclass SignalCatcher { 33e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes public: 34e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes SignalCatcher(); 35e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes ~SignalCatcher(); 36e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 37e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes private: 38e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes static void* Run(void* arg); 39e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes static void HandleSigQuit(); 40e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes static void HandleSigUsr1(); 41e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 42e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes static bool halt_; 43e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes pthread_t thread_; 44e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes}; 45e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 46e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes} // namespace art 47e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes 48e27955ca3ca960928d4dbd6cb79711fce06950b3Elliott Hughes#endif // ART_SRC_SIGNAL_CATCHER_H_ 49