File module-init-tools-eintr.diff of Package module-init-tools

---
 insmod.c   |    4 +++-
 modprobe.c |   11 ++++++++---
 rmmod.c    |    4 +++-
 3 files changed, 14 insertions(+), 5 deletions(-)

--- insmod.c.orig
+++ insmod.c
@@ -160,7 +160,9 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 
-	ret = init_module(file, len, options);
+	do {
+		ret = init_module(file, len, options);
+	} while (ret == -1 && errno == EINTR);
 	if (ret != 0) {
 		fprintf(stderr, "insmod: error inserting '%s': %li %s\n",
 			filename, ret, moderror(errno));
--- modprobe.c.orig
+++ modprobe.c
@@ -925,7 +925,9 @@ static void insmod(struct list_head *lis
 	if (dry_run)
 		goto out;
 
-	ret = init_module(map, len, optstring);
+	do {
+		ret = init_module(map, len, optstring);
+	} while (ret == -1 && errno == EINTR);
 	if (ret != 0) {
 		if (errno == EEXIST) {
 			if (first_time)
@@ -959,7 +961,7 @@ static void rmmod(struct list_head *list
 {
 	const char *command;
 	unsigned int usecount = 0;
-	int lock;
+	int lock, ret;
 	struct module *mod = list_entry(list->next, struct module, list);
 
 	/* Take first one off the list. */
@@ -995,7 +997,10 @@ static void rmmod(struct list_head *list
 	if (dry_run)
 		goto remove_rest;
 
-	if (delete_module(name, O_EXCL) != 0) {
+	do {
+		ret = delete_module(name, O_EXCL);
+	} while (ret == -1 && errno == EINTR);
+	if (ret != 0) {
 		if (errno == ENOENT)
 			goto nonexistent_module;
 		error("Error removing %s (%s): %s\n",
--- rmmod.c.orig
+++ rmmod.c
@@ -187,7 +187,9 @@ static int rmmod(int log, int verbose, c
 	     (flags & O_NONBLOCK) ? "no" : "yes",
 	     (flags & O_TRUNC) ? " force" : "");
 
-	ret = delete_module(name, flags);
+	do {
+		ret = delete_module(name, flags);
+	} while (ret == -1 && errno == EINTR);
 	if (ret != 0)
 		error(log, "Removing '%s': %s\n", name, strerror(errno));
 	return ret;
openSUSE Build Service is sponsored by