Я пытаюсь использовать ucontext для создания своего собственного контекста, и я хочу, чтобы этот контекст ждал основного или был последним до конца sh. Вот пример кода:
#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>
#include <valgrind/valgrind.h>
ucontext_t uc, previous;
int valgrind_stackid;
void * func(void * arg)
{
printf("I am in UC Context\n");
swapcontext(&uc,&previous);
printf("I am finishing the process\n");
return NULL;
}
int main() {
getcontext(&uc);
uc.uc_stack.ss_size = 64*1024;
uc.uc_stack.ss_sp = malloc(uc.uc_stack.ss_size);
valgrind_stackid = VALGRIND_STACK_REGISTER(uc.uc_stack.ss_sp, uc.uc_stack.ss_sp + uc.uc_stack.ss_size);
makecontext(&uc, (void (*)(void)) func, 1, NULL);
printf("I am in the main Context\n");
swapcontext(&previous, &uc);
printf("I came back in main \n");
setcontext(&uc);
printf("I am not comming back here\n");
return 0;
}
__attribute__((destructor))
static void destr() {
VALGRIND_STACK_DEREGISTER(valgrind_stackid);
free(uc.uc_stack.ss_sp);
}
этот код делает цель, но проблема в том, что я не хочу, чтобы у меня возникла проблема с несвободной памятью, когда я использую valgrind. Вот почему я добавил деструктор, чтобы освободить стек контекста, но когда я это сделаю, у меня будет множество ошибок в valgrind (недопустимое чтение), и без деструктора я получил только 1 неосвобожденную память, и это нормально. Поэтому я ищу способ освободить этот стек, не получая эти ошибки, если это возможно ??