/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <map> #include <folly/io/async/EventBase.h> #include <folly/portability/Event.h> namespace folly { /** * A handler to receive notification about POSIX signals. * * AsyncSignalHandler allows code to process signals from within a EventBase * loop. * * Standard signal handlers interrupt execution of the main thread, and * are run while the main thread is paused. As a result, great care must be * taken to avoid race conditions if the signal handler has to access or modify * any data used by the main thread. * * AsyncSignalHandler solves this problem by running the AsyncSignalHandler * callback in normal thread of execution, as a EventBase callback. * * AsyncSignalHandler may only be used in a single thread. It will only * process signals received by the thread where the AsyncSignalHandler is * registered. It is the user's responsibility to ensure that signals are * delivered to the desired thread in multi-threaded programs. */ class AsyncSignalHandler { … }; /** * Derived template class that allows forwarding of a callback to be invoked in * the overridden signalReceived(). * * One possible use is passing in a lambda; * CallbackAsyncSignalHandler handler{evb, [&foo](int) { * // do something with foo * }}; */ template <typename Callback> class CallbackAsyncSignalHandler : public AsyncSignalHandler { … }; } // namespace folly