Verify that all processes sharing a channel are the same user
Otherwise, signal delivery generally doesn't work, which results in
confusing behavior.
Change-Id: I23f81003a3729d37f4500de5c5567f41e22d121c
diff --git a/aos/ipc_lib/lockless_queue.cc b/aos/ipc_lib/lockless_queue.cc
index c323b8b..7126ffd 100644
--- a/aos/ipc_lib/lockless_queue.cc
+++ b/aos/ipc_lib/lockless_queue.cc
@@ -306,6 +306,7 @@
}
memory->next_queue_index.Invalidate();
+ memory->uid = getuid();
for (size_t i = 0; i < memory->num_senders(); ++i) {
::aos::ipc_lib::Sender *s = memory->GetSender(i);
@@ -319,6 +320,8 @@
// Signal everything is done. This needs to be done last, so if we die, we
// redo initialization.
memory->initialized = true;
+ } else {
+ CHECK_EQ(getuid(), memory->uid) << ": UIDs must match for all processes";
}
return memory;
@@ -871,6 +874,8 @@
<< memory->next_queue_index.Load(queue_size).DebugString()
<< ::std::endl;
+ ::std::cout << " uid_t uid = " << memory->uid << ::std::endl;
+
::std::cout << " }" << ::std::endl;
::std::cout << " AtomicIndex queue[" << queue_size << "] {" << ::std::endl;
for (size_t i = 0; i < queue_size; ++i) {