FreeRDP
signal.c File Reference
#include <freerdp/config.h>
#include <stddef.h>
#include <errno.h>
#include <string.h>
#include <winpr/crt.h>
#include <freerdp/utils/signal.h>
#include <freerdp/log.h>
#include <termios.h>
#include <pthread.h>
#include <winpr/debug.h>

Macros

#define TAG   FREERDP_TAG("utils.signal")
 

Functions

static void lock (void)
 
static void unlock (void)
 
static void term_handler (int signum)
 
static void fatal_handler (int signum)
 
static BOOL register_handlers (const int *signals, size_t count, void(*handler)(int))
 
int freerdp_handle_signals (void)
 
BOOL freerdp_add_signal_cleanup_handler (void *context, freerdp_signal_handler_t handler)
 registers a cleanup handler for non fatal signals. More...
 
BOOL freerdp_del_signal_cleanup_handler (void *context, freerdp_signal_handler_t handler)
 unregisters a cleanup handler for non fatal signals. More...
 

Variables

static BOOL handlers_registered = FALSE
 
static pthread_mutex_t signal_handler_lock = PTHREAD_MUTEX_INITIALIZER
 
static size_t cleanup_handler_count = 0
 
static cleanup_handler_t cleanup_handlers [20] = { 0 }
 
static const int term_signals [] = { SIGINT, SIGKILL, SIGQUIT, SIGSTOP, SIGTERM }
 
static const int fatal_signals []
 

Macro Definition Documentation

◆ TAG

#define TAG   FREERDP_TAG("utils.signal")

FreeRDP: A Remote Desktop Protocol Implementation Signal handling

Copyright 2011 Shea Levy shea@.nosp@m.shea.nosp@m.levy..nosp@m.com

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.

Function Documentation

◆ fatal_handler()

static void fatal_handler ( int  signum)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_add_signal_cleanup_handler()

BOOL freerdp_add_signal_cleanup_handler ( void *  context,
freerdp_signal_handler_t  handler 
)

registers a cleanup handler for non fatal signals.

This allows cleaning up resources like with atexit but for signals.

Parameters
contexta context for the clenaup handler.
handlerthe function to call on cleanup. Must not be NULL
Returns
TRUE if registered successfully, FALSE otherwise.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_del_signal_cleanup_handler()

BOOL freerdp_del_signal_cleanup_handler ( void *  context,
freerdp_signal_handler_t  handler 
)

unregisters a cleanup handler for non fatal signals.

This allows removal of a cleanup handler for signals.

Parameters
contexta context for the clenaup handler.
handlerthe function to call on cleanup. Must not be NULL
Returns
TRUE if unregistered successfully, FALSE otherwise.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_handle_signals()

int freerdp_handle_signals ( void  )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ lock()

static void lock ( void  )
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ register_handlers()

static BOOL register_handlers ( const int *  signals,
size_t  count,
void(*)(int)  handler 
)
static
Here is the caller graph for this function:

◆ term_handler()

static void term_handler ( int  signum)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ unlock()

static void unlock ( void  )
static
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ cleanup_handler_count

size_t cleanup_handler_count = 0
static

◆ cleanup_handlers

cleanup_handler_t cleanup_handlers[20] = { 0 }
static

◆ fatal_signals

const int fatal_signals[]
static
Initial value:
= { SIGABRT, SIGALRM, SIGBUS, SIGFPE, SIGHUP, SIGILL,
SIGSEGV, SIGTSTP, SIGTTIN, SIGTTOU, SIGUSR1, SIGUSR2,
SIGTRAP,
SIGXCPU, SIGXFSZ }

◆ handlers_registered

BOOL handlers_registered = FALSE
static

◆ signal_handler_lock

pthread_mutex_t signal_handler_lock = PTHREAD_MUTEX_INITIALIZER
static

◆ term_signals

const int term_signals[] = { SIGINT, SIGKILL, SIGQUIT, SIGSTOP, SIGTERM }
static