21 #ifndef BT_SIGNALCATCHER_H
22 #define BT_SIGNALCATCHER_H
26 #include <ktorrent_export.h>
30 #include <QSocketNotifier>
31 #include <util/error.h>
38 extern KTORRENT_EXPORT sigjmp_buf sigbus_env;
43 class KTORRENT_EXPORT BusErrorGuard
47 virtual ~BusErrorGuard();
53 class KTORRENT_EXPORT BusError :
public bt::Error
56 BusError(
bool write_operation);
78 bool catchSignal(
int sig);
81 void handleInput(
int fd);
84 static void signalHandler(
int sig, siginfo_t *siginfo,
void *ptr);
91 QSocketNotifier* notifier;
92 static int signal_received_pipe[2];
97 #define BUS_ERROR_WPROTECT() BusErrorGuard bus_error_guard; if (sigsetjmp(bt::sigbus_env, 1)) throw bt::BusError(true)
100 #define BUS_ERROR_RPROTECT() BusErrorGuard bus_error_guard; if (sigsetjmp(bt::sigbus_env, 1)) throw bt::BusError(false)
104 #endif // BT_SIGNALCATCHER_H