Module: xenomai-3 Branch: master Commit: 4f446a6eb7abd8b304944bc342507b7feb35acd3 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=4f446a6eb7abd8b304944bc342507b7feb35acd3
Author: Philippe Gerum <r...@xenomai.org> Date: Fri Jun 19 14:47:48 2015 +0200 copperplate/heapobj: give unshadowed main thread a large wait_union --- lib/copperplate/threadobj.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/copperplate/threadobj.c b/lib/copperplate/threadobj.c index 1b98fbf..88bb59e 100644 --- a/lib/copperplate/threadobj.c +++ b/lib/copperplate/threadobj.c @@ -44,6 +44,11 @@ union copperplate_wait_union { struct eventobj_wait_struct eventobj_wait; }; +union main_wait_union { + union copperplate_wait_union copperplate_wait; + char untyped_wait[1024]; +}; + static void finalize_thread(void *p); static void set_global_priority(struct threadobj *thobj, int policy, @@ -1697,10 +1702,15 @@ static inline int main_overlay(void) /* * Make the main() context a basic yet complete thread object, * so that it may use any services which require the caller to - * have a Copperplate TCB (e.g. all blocking services). + * have a Copperplate TCB (e.g. all blocking services). We + * allocate a wait union which should be sufficient for + * calling any blocking service from any high-level API from + * an unshadowed main thread. APIs might have other reasons + * not to allow such call though, in which case they should + * check explicitly for those conditions. */ tcb = __threadobj_alloc(sizeof(*tcb), - sizeof(union copperplate_wait_union), + sizeof(union main_wait_union), 0); if (tcb == NULL) panic("failed to allocate main tcb"); _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git