Date: Tue, 29 Jul 2003 15:18:51 -0700 From: Randy Sato <rsato@mac.com> To: freebsd-alpha@freebsd.org Subject: makecontext doesn't work? Message-ID: <8188769.1059517131841.JavaMail.rsato@mac.com>
next in thread | raw e-mail | index | archive | help
In configure for gstreamer-0.6.2, a check for a working makecontext/swapcontext loops forever because it appears that makecontext does not work and the child function is never called. Instead execution continues just after the getcontext() call. Is this a bug in makecontext or in configure? This is using 5.1-Release on alpha. #include <stdio.h> #include <stdlib.h> #include <ucontext.h> ucontext_t uc_child; ucontext_t uc_main; void child(void /**arg*/) { void *arg = NULL; if (arg != (void *)12345) exit(1); if (swapcontext(&uc_child, &uc_main) != 0) exit(1); } int main(int argc, char *argv[]) { FILE *fp; void *stack; /* the default is that it fails */ if ((fp = fopen("conftestval", "w")) == NULL) exit(1); fprintf(fp, "no\n"); fclose(fp); /* configure a child user-space context */ if ((stack = malloc(64*1024)) == NULL) exit(1); if (getcontext(&uc_child) != 0) exit(1); uc_child.uc_link = NULL; uc_child.uc_stack.ss_sp = (char *)stack+(32*1024); uc_child.uc_stack.ss_size = 32*1024; uc_child.uc_stack.ss_flags = 0; makecontext(&uc_child, child, 2, (void *)12345); /* switch into the user context */ if (swapcontext(&uc_main, &uc_child) != 0) exit(1); /* Fine, child came home */ if ((fp = fopen("conftestval", "w")) == NULL) exit(1); fprintf(fp, "yes\n"); fclose(fp); /* die successfully */ exit(0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8188769.1059517131841.JavaMail.rsato>