Skip site navigation (1)Skip section navigation (2)
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>