Redefine exit to simply destroy a process
authorKevin Klues <klueska@ros-dev.(none)>
Sat, 24 Apr 2010 00:17:45 +0000 (17:17 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:44 +0000 (17:35 -0700)
Need to sort out the right way to do this, but currently
glibc sometimes calls sys_yield() on its exit path, which
breaks process destruction in many-core mode.

user/include/vcore.h

index 2e6e11e..9bcc48a 100644 (file)
@@ -8,6 +8,18 @@ extern "C" {
 #include <arch/vcore.h>
 #include <string.h>
 
+/*****************************************************************************/
+/* TODO: This is a complete hack, but necessary for vcore stuff tow ork for now
+ * The issue is that exit sometimes calls sys_yield(), and we can't recover from
+ * that properly under our vcore model (we shouldn't though).  We really need to
+ * rethink what sys_yield 'should' do when in multicore mode, or else come up 
+ * with a different syscall entirely. */
+#include <stdlib.h>
+#include <unistd.h>
+#undef exit
+#define exit(status) ros_syscall(SYS_proc_destroy,getpid(),status,0,0,0)
+/*****************************************************************************/
+
 #define LOG2_MAX_VCORES 6
 #define MAX_VCORES (1 << LOG2_MAX_VCORES)