Don't display "can't bind socket: read only file sytem" error on the
authorDavin McCall <davmac@davmac.org>
Sat, 18 Jun 2016 19:37:14 +0000 (20:37 +0100)
committerDavin McCall <davmac@davmac.org>
Sat, 18 Jun 2016 19:37:14 +0000 (20:37 +0100)
first attempt to bind the control socket (immediately after starting).
It's pretty normal for the filesystem to be mounted read-only at that
stage.

src/dinit.cc
src/service.cc

index 1b8fc65ac876df4969ba9531b162633132cdc7bc..d7153a3e79a5e64b10c8006470421ca0402c21bb 100644 (file)
@@ -72,7 +72,7 @@ static void close_control_socket() noexcept;
 
 static void control_socket_cb(EventLoop_t *loop, int fd);
 
-void open_control_socket() noexcept;
+void open_control_socket(bool report_ro_failure = true) noexcept;
 void setup_external_log() noexcept;
 
 
@@ -327,7 +327,7 @@ int main(int argc, char **argv)
     sigterm_watcher.addWatch(eventLoop, SIGTERM);
 
     // Try to open control socket (may fail due to readonly filesystem)
-    open_control_socket();
+    open_control_socket(false);
     
 #ifdef __linux__
     if (am_system_init) {
@@ -454,7 +454,7 @@ static void control_socket_cb(EventLoop_t *loop, int sockfd)
     }
 }
 
-void open_control_socket() noexcept
+void open_control_socket(bool report_ro_failure) noexcept
 {
     if (! control_socket_open) {
         const char * saddrname = control_socket_path;
@@ -485,7 +485,9 @@ void open_control_socket() noexcept
         }
 
         if (bind(sockfd, (struct sockaddr *) name, sockaddr_size) == -1) {
-            log(LogLevel::ERROR, "Error binding control socket: ", strerror(errno));
+            if (errno != EROFS || report_ro_failure) {
+                log(LogLevel::ERROR, "Error binding control socket: ", strerror(errno));
+            }
             close(sockfd);
             free(name);
             return;
index c81b0cb65789e55bdf6941641dccc1b13119cc60..46388544a9f2e8346455df69e457517815d8584d 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 // from dinit.cc:
-void open_control_socket() noexcept;
+void open_control_socket(bool report_ro_failure = true) noexcept;
 void setup_external_log() noexcept;
 extern EventLoop_t eventLoop;