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;