#include <corax/syscall.h>
#include <corax/ipc.h>
#include <corax/heap.h>
+#include <debug.h>
#include <process.h>
int sys_cxsend(pid_t to, struct cxmsg *msg)
sproc = process_get_current();
dproc = process_lookup(to);
+#if FEATURE(DEBUG_IPC)
+ dbg_printf("sys_cxsend(0x%08x, %p)\n", to, msg);
+ dbg_printf("msg %p [pid %u] -> %p [pid %u]\n",
+ sproc, sproc ? process_get_id(sproc) : 0,
+ dproc, dproc ? process_get_id(dproc) : 0);
+#endif /* FEATURE(DEBUG_IPC) */
+
if(sproc && dproc) {
struct cxmsg *kmsg;
} else {
/* wait for destination process to pick up the message */
+#if FEATURE(DEBUG_IPC)
+ dbg_printf("[%u] waiting for pid %u\n", process_get_id(sproc), to);
+#endif /* FEATURE(DEBUG_IPC) */
+
process_wait(to);
+
+#if FEATURE(DEBUG_IPC)
+ dbg_printf("[%u] returned from process_wait()\n", process_get_id(sproc));
+#endif /* FEATURE(DEBUG_IPC) */
}
}
}
process_t *cproc;
int ret_val;
+#if FEATURE(DEBUG_IPC)
+ dbg_printf("sys_cxrecv(0x%08x, %p)\n", from, msg);
+#endif /* FEATURE(DEBUG_IPC) */
+
ret_val = -EFAULT;
cproc = process_get_current();
if(cproc) {
struct cxmsg *kmsg;
+#if FEATURE(DEBUG_IPC)
+ dbg_printf("[%u] waiting for message\n", process_get_id(cproc));
+#endif /* FEATURE(DEBUG_IPC) */
+
/* process_inbox_get() always returns a valid message (or waits forever) */
kmsg = process_inbox_get(from);
+#if FEATURE(DEBUG_IPC)
+ dbg_printf("[%u] got a message\n", process_get_id(cproc));
+#endif /* FEATURE(DEBUG_IPC) */
+
process_memcpy_ktop(cproc, msg, kmsg, sizeof(*msg));
/* signal source that their message was picked up */