1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2018 Couchbase, Inc
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  */
17 
18 /**
19  * This program/test is designed to block waiting for a ctrl+c signal. If the
20  * signal handler has been setup properly then program should return 0 when
21  * SIGINT is triggered. If it has not been setup properly then the program
22  * will be forced to exit and will return 1 instead.
23  */
24 
25 #include <atomic>
26 #include <iostream>
27 #include <thread>
28 
29 #include <platform/interrupt.h>
30 
31 static std::atomic<bool> go{false};
32 
handler()33 void handler() {
34     go = true;
35 }
36 
main(int argc, char** argv)37 int main(int argc, char** argv) {
38     std::cerr << "Registering SIGINT handler\n";
39     cb::console::set_sigint_handler(handler);
40 
41     std::cerr << "Busy waiting for signal\n";
42     while (!go) {
43         std::this_thread::sleep_for(std::chrono::milliseconds(50));
44     }
45     std::cerr << "SIGINT detected!\n";
46     return 0;
47 }
48