[lvm-devel] main - signals: add interruptible usleep

Zdenek Kabelac zkabelac at sourceware.org
Mon Mar 15 10:14:01 UTC 2021


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=941f67ed09155011f13bb75db6aed621f94e2374
Commit:        941f67ed09155011f13bb75db6aed621f94e2374
Parent:        bbac843268ab353bb80a7f09841ff467bdcdeb04
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Mar 12 11:18:53 2021 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Sun Mar 14 16:34:38 2021 +0100

signals: add interruptible usleep

Add small wrapper that temporarily enables signal handling during
usleep() and return  '0' when interrupted.
---
 lib/misc/lvm-signal.c | 13 +++++++++++++
 lib/misc/lvm-signal.h |  3 +++
 2 files changed, 16 insertions(+)

diff --git a/lib/misc/lvm-signal.c b/lib/misc/lvm-signal.c
index b90a2db81..b1653a85c 100644
--- a/lib/misc/lvm-signal.c
+++ b/lib/misc/lvm-signal.c
@@ -153,3 +153,16 @@ void unblock_signals(void)
 
 	_signals_blocked = 0;
 }
+
+/* usleep with enabled signal handler.
+ * Returns 1 when there was interruption */
+int interruptible_usleep(useconds_t usec)
+{
+	int r;
+
+	sigint_allow();
+	r = usleep(usec);
+	sigint_restore();
+
+	return (sigint_caught() || r) ? 1 : 0;
+}
diff --git a/lib/misc/lvm-signal.h b/lib/misc/lvm-signal.h
index 2f7309f5d..a39f77eb2 100644
--- a/lib/misc/lvm-signal.h
+++ b/lib/misc/lvm-signal.h
@@ -16,6 +16,8 @@
 #ifndef _LVM_SIGNAL_H
 #define _LVM_SIGNAL_H
 
+#include <unistd.h>
+
 void remove_ctrl_c_handler(void);
 void install_ctrl_c_handler(void);
 int init_signals(int suppress_messages);
@@ -28,4 +30,5 @@ void sigint_clear(void);
 void block_signals(uint32_t flags);
 void unblock_signals(void);
 
+int interruptible_usleep(useconds_t usec);
 #endif




More information about the lvm-devel mailing list