aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/libmdsserver/macros.h17
-rw-r--r--src/mds-base.c6
-rw-r--r--src/mds-clipboard.c2
-rw-r--r--src/mds-colour.c2
-rw-r--r--src/mds-echo.c2
-rw-r--r--src/mds-kkbd.c2
-rw-r--r--src/mds-respawn.c4
-rw-r--r--src/mds-vt.c4
8 files changed, 39 insertions, 0 deletions
diff --git a/src/libmdsserver/macros.h b/src/libmdsserver/macros.h
index 89db22f..f17da94 100644
--- a/src/libmdsserver/macros.h
+++ b/src/libmdsserver/macros.h
@@ -752,5 +752,22 @@
#endif
+/**
+ * Normal signal handlers should place this macro
+ * at the top of the function
+ */
+#define SIGHANDLER_START \
+ int sighandler_saved_errno = errno
+
+
+/**
+ * Normal signal handlers should place this macro
+ * at the bottom of the function, or just before
+ * any `return`
+ */
+#define SIGHANDLER_END \
+ (errno = sighandler_saved_errno)
+
+
#endif
diff --git a/src/mds-base.c b/src/mds-base.c
index 2220003..e9c7c8b 100644
--- a/src/mds-base.c
+++ b/src/mds-base.c
@@ -334,6 +334,7 @@ static void __attribute__((const)) received_noop(int signo)
*/
void __attribute__((weak)) received_reexec(int signo)
{
+ SIGHANDLER_START;
(void) signo;
if (reexecing == 0)
{
@@ -341,6 +342,7 @@ void __attribute__((weak)) received_reexec(int signo)
eprint("re-exec signal received.");
signal_all(signo);
}
+ SIGHANDLER_END;
}
@@ -354,6 +356,7 @@ void __attribute__((weak)) received_reexec(int signo)
*/
void __attribute__((weak)) received_terminate(int signo)
{
+ SIGHANDLER_START;
(void) signo;
if (terminating == 0)
{
@@ -361,6 +364,7 @@ void __attribute__((weak)) received_terminate(int signo)
eprint("terminate signal received.");
signal_all(signo);
}
+ SIGHANDLER_END;
}
@@ -375,12 +379,14 @@ void __attribute__((weak)) received_terminate(int signo)
*/
void __attribute__((weak)) received_danger(int signo)
{
+ SIGHANDLER_START;
(void) signo;
if (danger == 0)
{
danger = 1;
eprint("danger signal received.");
}
+ SIGHANDLER_END;
}
diff --git a/src/mds-clipboard.c b/src/mds-clipboard.c
index cbfed79..6c0a2ed 100644
--- a/src/mds-clipboard.c
+++ b/src/mds-clipboard.c
@@ -899,6 +899,7 @@ int clipboard_get_size(int level, const char* recv_client_id, const char* recv_m
*/
void received_info(int signo)
{
+ SIGHANDLER_START;
clipitem_t clipitem;
size_t i, j, n;
struct timespec now;
@@ -937,5 +938,6 @@ void received_info(int signo)
clipitem.content);
}
}
+ SIGHANDLER_END;
}
diff --git a/src/mds-colour.c b/src/mds-colour.c
index c5151dc..b4b166d 100644
--- a/src/mds-colour.c
+++ b/src/mds-colour.c
@@ -477,6 +477,7 @@ int handle_set_colour(const char* recv_name, const char* recv_remove, const char
*/
void received_info(int signo)
{
+ SIGHANDLER_START;
size_t i;
colour_list_entry_t* entry;
(void) signo;
@@ -489,6 +490,7 @@ void received_info(int signo)
entry->value.bytes, entry->value.red, entry->value.green,
entry->value.blue, entry->key_hash, entry->key);
iprint("END DEFINED COLOURS");
+ SIGHANDLER_END;
}
diff --git a/src/mds-echo.c b/src/mds-echo.c
index a531812..c434656 100644
--- a/src/mds-echo.c
+++ b/src/mds-echo.c
@@ -351,9 +351,11 @@ int echo_message(void)
*/
void received_info(int signo)
{
+ SIGHANDLER_START;
(void) signo;
iprintf("next message ID: %" PRIu32, message_id);
iprintf("connected: %s", connected ? "yes" : "no");
iprintf("echo buffer size: %zu bytes", echo_buffer_size);
+ SIGHANDLER_END;
}
diff --git a/src/mds-kkbd.c b/src/mds-kkbd.c
index 284c56b..1088385 100644
--- a/src/mds-kkbd.c
+++ b/src/mds-kkbd.c
@@ -1730,6 +1730,7 @@ void shrink_map(void)
*/
void received_info(int signo)
{
+ SIGHANDLER_START;
size_t i;
(void) signo;
iprintf("next message ID: %" PRIu32, message_id);
@@ -1746,5 +1747,6 @@ void received_info(int signo)
for (i = 0; i < mapping_size; i++)
if ((int)i != mapping[i])
iprintf(" %zu -> %i", i, mapping[i]);
+ SIGHANDLER_END;
}
diff --git a/src/mds-respawn.c b/src/mds-respawn.c
index 785eb67..0b68d08 100644
--- a/src/mds-respawn.c
+++ b/src/mds-respawn.c
@@ -225,9 +225,11 @@ static void spawn_server(size_t index)
*/
static void received_revive(int signo)
{
+ SIGHANDLER_START;
(void) signo;
reviving = 1;
eprint("revive signal received.");
+ SIGHANDLER_END;
}
@@ -545,6 +547,7 @@ int master_loop(void)
*/
void received_info(int signo)
{
+ SIGHANDLER_START;
server_state_t state;
size_t i, n = servers;
char** cmdline;
@@ -577,5 +580,6 @@ void received_info(int signo)
while (*cmdline)
iprintf(" %z", *cmdline++);
}
+ SIGHANDLER_END;
}
diff --git a/src/mds-vt.c b/src/mds-vt.c
index 2449aba..0264904 100644
--- a/src/mds-vt.c
+++ b/src/mds-vt.c
@@ -716,8 +716,10 @@ void signal_all(int signo)
*/
void received_switch_vt(int signo)
{
+ SIGHANDLER_START;
int leaving = signo == (SIGRTMIN + 2);
switching_vt = leaving ? 1 : -1;
+ SIGHANDLER_END;
}
@@ -881,6 +883,7 @@ void vt_construct_mode(int vt_switch_control, int vt_leave_signal,
*/
void received_info(int signo)
{
+ SIGHANDLER_START;
(void) signo;
iprintf("next message ID: %" PRIu32, message_id);
iprintf("connected: %s", connected ? "yes" : "no");
@@ -896,5 +899,6 @@ void received_info(int signo)
iprintf("secondary thread started: %s", secondary_thread_started ? "yes" : "no");
iprintf("secondary thread failed: %s", secondary_thread_failed ? "yes" : "no");
iprintf("non-exclusive counter: %zi", nonexclusive_counter);
+ SIGHANDLER_END;
}