fatal-signal: New function fatal_signal_unlink_file_now().
authorBen Pfaff <blp@nicira.com>
Mon, 21 Sep 2009 19:37:20 +0000 (12:37 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 21 Sep 2009 23:44:58 +0000 (16:44 -0700)
This is a helper function that combines two actions that callers commonly
wanted.  It will have an additional user in an upcoming commit.

lib/fatal-signal.c
lib/fatal-signal.h
lib/unixctl.c
lib/vlog-modules.def

index ff011363e307b8dce9b1e1a70a6a1b3cef6da975..d8862bbf3c5992ca63d900ea610dcc4271aa6378 100644 (file)
@@ -26,6 +26,9 @@
 #include "shash.h"
 #include "util.h"
 
+#define THIS_MODULE VLM_fatal_signal
+#include "vlog.h"
+
 /* Signals to catch. */
 static const int fatal_signals[] = { SIGTERM, SIGINT, SIGHUP, SIGALRM };
 
@@ -204,6 +207,21 @@ fatal_signal_remove_file_to_unlink(const char *file)
     fatal_signal_unblock();
 }
 
+/* Like fatal_signal_remove_file_to_unlink(), but also unlinks 'file'.
+ * Returns 0 if successful, otherwise a positive errno value. */
+int
+fatal_signal_unlink_file_now(const char *file)
+{
+    int error = unlink(file) ? errno : 0;
+    if (error) {
+        VLOG_WARN("could not unlink \"%s\" (%s)", file, strerror(error));
+    }
+
+    fatal_signal_remove_file_to_unlink(file);
+
+    return error;
+}
+
 static void
 unlink_files(void *aux UNUSED)
 {
index 0bce1e272c6402573ef946ab5eeb09e9532d2a64..c96db86ddfec06dd98c0c16d43920d2e2b76791c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008 Nicira Networks.
+ * Copyright (c) 2008, 2009 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ void fatal_signal_fork(void);
  * exit(). */
 void fatal_signal_add_file_to_unlink(const char *);
 void fatal_signal_remove_file_to_unlink(const char *);
+int fatal_signal_unlink_file_now(const char *);
 
 /* Interface for other code that catches one of our signals and needs to pass
  * it through. */
index 7d6fdd67bb5afdcf83f708720a1a0b4010349fb2..e774ffe4af5cfbb9aecb99586c13cc84b8810a60 100644 (file)
@@ -438,8 +438,7 @@ unixctl_server_destroy(struct unixctl_server *server)
         }
 
         close(server->fd);
-        unlink(server->path);
-        fatal_signal_remove_file_to_unlink(server->path);
+        fatal_signal_unlink_file_now(server->path);
         free(server->path);
         free(server);
     }
@@ -504,8 +503,7 @@ void
 unixctl_client_destroy(struct unixctl_client *client)
 {
     if (client) {
-        unlink(client->bind_path);
-        fatal_signal_remove_file_to_unlink(client->bind_path);
+        fatal_signal_unlink_file_now(client->bind_path);
         free(client->bind_path);
         free(client->connect_path);
         fclose(client->stream);
index 849c867bdd9cebb553a3aff901b1a674bea0f01a..ce298b55ebe8e01a93b2692ca657d7f340d03bab 100644 (file)
@@ -36,6 +36,7 @@ VLOG_MODULE(dpctl)
 VLOG_MODULE(executer)
 VLOG_MODULE(ezio_term)
 VLOG_MODULE(fail_open)
+VLOG_MODULE(fatal_signal)
 VLOG_MODULE(fault)
 VLOG_MODULE(flow)
 VLOG_MODULE(in_band)