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