Browse Source

dinitctl/monitor: catch bad_alloc in initialisation and report error

Davin McCall 2 years ago
parent
commit
32b2f9833e
2 changed files with 24 additions and 2 deletions
  1. 11 1
      src/dinit-monitor.cc
  2. 13 1
      src/dinitctl.cc

+ 11 - 1
src/dinit-monitor.cc

@@ -34,7 +34,7 @@ static bool load_service(int socknum, cpbuffer_t &rbuffer, const char *name, han
 // dummy handler, so we can wait for children
 static void sigchld_handler(int) { }
 
-int main(int argc, char **argv)
+int dinit_monitor_main(int argc, char **argv)
 {
     bool show_help = argc < 2;
     std::string control_socket_str;
@@ -313,6 +313,16 @@ int main(int argc, char **argv)
     return 1;
 }
 
+int main(int argc, char **argv) {
+    try {
+        return dinit_monitor_main(argc, argv);
+    }
+    catch (std::bad_alloc &e) {
+        std::cerr << "dinit-monitor: out of memory\n";
+    }
+    return 1;
+}
+
 static std::vector<stringview> split_command(const char *cmd)
 {
     using std::locale;

+ 13 - 1
src/dinitctl.cc

@@ -88,7 +88,7 @@ class dinit_protocol_error
 };
 
 // Entry point.
-int main(int argc, char **argv)
+int dinitctl_main(int argc, char **argv)
 {
     using namespace std;
     
@@ -435,6 +435,18 @@ int main(int argc, char **argv)
     return 1;
 }
 
+int main(int argc, char **argv)
+{
+    try {
+        return dinitctl_main(argc, argv);
+    }
+    catch (std::bad_alloc &e) {
+        std::cerr << "dinitctl: out of memory\n";
+    }
+    return 1;
+}
+
+
 // Extract/read a string of specified length from the buffer/socket. The string is consumed
 // from the buffer.
 static std::string read_string(int socknum, cpbuffer_t &rbuffer, uint32_t length)