Merge "Add basic support for nodes"
diff --git a/aos/events/shm_event_loop.cc b/aos/events/shm_event_loop.cc
index e696f36..0f933f9 100644
--- a/aos/events/shm_event_loop.cc
+++ b/aos/events/shm_event_loop.cc
@@ -103,19 +103,20 @@
 
  private:
   void MkdirP(std::string_view path) {
-    struct stat st;
     auto last_slash_pos = path.find_last_of("/");
 
     std::string folder(last_slash_pos == std::string_view::npos
                            ? std::string_view("")
                            : path.substr(0, last_slash_pos));
-    if (stat(folder.c_str(), &st) == -1) {
-      PCHECK(errno == ENOENT);
-      CHECK_NE(folder, "") << ": Base path doesn't exist";
-      MkdirP(folder);
-      VLOG(1) << "Creating " << folder;
-      PCHECK(mkdir(folder.c_str(), FLAGS_permissions) == 0);
+    if (folder.empty()) return;
+    MkdirP(folder);
+    VLOG(1) << "Creating " << folder;
+    const int result = mkdir(folder.c_str(), FLAGS_permissions);
+    if (result == -1 && errno == EEXIST) {
+      VLOG(1) << "Already exists";
+      return;
     }
+    PCHECK(result == 0) << ": Error creating " << folder;
   }
 
   ipc_lib::LocklessQueueConfiguration config_;
diff --git a/aos/ipc_lib/lockless_queue.cc b/aos/ipc_lib/lockless_queue.cc
index 0c87e4d..3fb506b 100644
--- a/aos/ipc_lib/lockless_queue.cc
+++ b/aos/ipc_lib/lockless_queue.cc
@@ -239,6 +239,12 @@
 
 }  // namespace
 
+size_t LocklessQueueConfiguration::message_size() const {
+  // Round up the message size so following data is aligned appropriately.
+  return LocklessQueueMemory::AlignmentRoundUp(message_data_size) +
+         sizeof(Message);
+}
+
 size_t LocklessQueueMemorySize(LocklessQueueConfiguration config) {
   // Round up the message size so following data is aligned appropriately.
   config.message_data_size =
@@ -278,8 +284,7 @@
     memory->config.num_watchers = config.num_watchers;
     memory->config.num_senders = config.num_senders;
     memory->config.queue_size = config.queue_size;
-    memory->config.message_data_size =
-        LocklessQueueMemory::AlignmentRoundUp(config.message_data_size);
+    memory->config.message_data_size = config.message_data_size;
 
     const size_t num_messages = memory->num_messages();
     // There need to be at most MaxMessages() messages allocated.
diff --git a/aos/ipc_lib/lockless_queue.h b/aos/ipc_lib/lockless_queue.h
index 4a8523b..d539386 100644
--- a/aos/ipc_lib/lockless_queue.h
+++ b/aos/ipc_lib/lockless_queue.h
@@ -83,7 +83,7 @@
   // Size in bytes of the data stored in each Message.
   size_t message_data_size;
 
-  size_t message_size() const { return message_data_size + sizeof(Message); }
+  size_t message_size() const;
 
   size_t num_messages() const { return num_senders + queue_size; }
 };