diff --git a/aos/linux_code/init.cc b/aos/linux_code/init.cc
index c38bfc0..eb3658c 100644
--- a/aos/linux_code/init.cc
+++ b/aos/linux_code/init.cc
@@ -59,12 +59,13 @@
 // non-realtime initialization sequences. May be called twice.
 void InitStart() {
   ::aos::logging::Init();
-  // Allow locking as much as we want into RAM.
-  SetSoftRLimit(RLIMIT_MEMLOCK, RLIM_INFINITY, false);
   WriteCoreDumps();
 }
 
 void LockAllMemory() {
+  // Allow locking as much as we want into RAM.
+  SetSoftRLimit(RLIMIT_MEMLOCK, RLIM_INFINITY, false);
+
   InitStart();
   if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) {
     PDie("%s-init: mlockall failed", program_invocation_short_name);
@@ -92,22 +93,25 @@
   free(heap_data);
 }
 
-// Do the initialization code that is necessary for both realtime and
-// non-realtime processes.
-void DoInitNRT(aos_core_create create) {
-  InitStart();
-  aos_core_create_shared_mem(create);
-  logging::linux_code::Register();
-}
-
 const char *const kNoRealtimeEnvironmentVariable = "AOS_NO_REALTIME";
 
 }  // namespace
 
-void InitNRT() { DoInitNRT(aos_core_create::reference); }
-void InitCreate() { DoInitNRT(aos_core_create::create); }
+void InitNRT() {
+  InitStart();
+  aos_core_create_shared_mem(false, false);
+  logging::linux_code::Register();
+}
+
+void InitCreate() {
+  InitStart();
+  aos_core_create_shared_mem(true, false);
+  logging::linux_code::Register();
+}
+
 void Init(int relative_priority) {
-  if (getenv(kNoRealtimeEnvironmentVariable) == NULL) {  // if nobody set it
+  bool realtime = getenv(kNoRealtimeEnvironmentVariable) == nullptr;
+  if (realtime) {
     LockAllMemory();
 
     // Only let rt processes run for 3 seconds straight.
@@ -129,7 +133,9 @@
     printf("no realtime for %s. see stderr\n", program_invocation_short_name);
   }
 
-  InitNRT();
+  InitStart();
+  aos_core_create_shared_mem(false, realtime);
+  logging::linux_code::Register();
 }
 
 void Cleanup() {
diff --git a/aos/linux_code/ipc_lib/shared_mem.c b/aos/linux_code/ipc_lib/shared_mem.c
index bc2cc62..79b747a 100644
--- a/aos/linux_code/ipc_lib/shared_mem.c
+++ b/aos/linux_code/ipc_lib/shared_mem.c
@@ -37,7 +37,7 @@
 struct aos_core *global_core = NULL;
 
 // TODO(brians): madvise(2) it to put this shm in core dumps.
-void aos_core_create_shared_mem(enum aos_core_create to_create) {
+void aos_core_create_shared_mem(int create, int lock) {
   assert(global_core == NULL);
   static struct aos_core global_core_data;
   global_core = &global_core_data;
@@ -53,7 +53,7 @@
   }
 
   int shm;
-  if (to_create == create) {
+  if (create) {
     while (1) {
       printf("shared_mem: creating %s\n", global_core->shm_name);
       shm = shm_open(global_core->shm_name, O_RDWR | O_CREAT | O_EXCL, 0666);
@@ -82,12 +82,13 @@
       PLOG(FATAL, "fruncate(%d, 0x%zx) failed", shm, (size_t)SIZEOFSHMSEG);
     }
   }
-  void *shm_address = mmap(
-      (void *)SHM_START, SIZEOFSHMSEG, PROT_READ | PROT_WRITE,
-      MAP_SHARED | MAP_FIXED | MAP_LOCKED | MAP_POPULATE, shm, 0);
+  int flags = MAP_SHARED | MAP_FIXED;
+  if (lock) flags |= MAP_LOCKED | MAP_POPULATE;
+  void *shm_address = mmap((void *)SHM_START, SIZEOFSHMSEG,
+                           PROT_READ | PROT_WRITE, flags, shm, 0);
   if (shm_address == MAP_FAILED) {
-    PLOG(FATAL, "shared_mem: mmap(%p, 0x%zx, stuff, stuff, %d, 0) failed",
-         (void *)SHM_START, (size_t)SIZEOFSHMSEG, shm);
+    PLOG(FATAL, "shared_mem: mmap(%p, 0x%zx, stuff, %x, %d, 0) failed",
+         (void *)SHM_START, (size_t)SIZEOFSHMSEG, flags, shm);
   }
   printf("shared_mem: shm at: %p\n", shm_address);
   if (close(shm) == -1) {
diff --git a/aos/linux_code/ipc_lib/shared_mem.h b/aos/linux_code/ipc_lib/shared_mem.h
index f1eb489..a33290c 100644
--- a/aos/linux_code/ipc_lib/shared_mem.h
+++ b/aos/linux_code/ipc_lib/shared_mem.h
@@ -44,10 +44,6 @@
   aos_global_pointer queue_types;
 } aos_shm_core;
 
-enum aos_core_create {
-  create,
-  reference
-};
 struct aos_core {
   // Non-0 if we "own" shared_mem and should shm_unlink(3) it when we're done.
   int owner;
@@ -71,7 +67,10 @@
 // before passing the memory to this function.
 void aos_core_use_address_as_shared_mem(void *address, size_t size);
 
-void aos_core_create_shared_mem(enum aos_core_create to_create);
+// create is true to remove any existing shm to create a fresh one or false to
+// fail if it does not already exist.
+// lock is true to lock shared memory into RAM or false to not.
+void aos_core_create_shared_mem(int create, int lock);
 void aos_core_free_shared_mem(void);
 
 // Returns whether or not the shared memory system is active.
