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
31static std::atomic<bool> go{false};
32
33void handler() {
34    go = true;
35}
36
37int 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