On Wed, Mar 18, 2009 at 12:22 PM, Tiago Maluta <maluta_tiago@xxxxxxxxxxxx> wrote: > xcomp@xxxxxxxx wrote: >> Hi all, >> I have written a small test case which simply creates a new context, swaps to it and returns to the main function. I am allocating memory for the ucontext_t structures and the stack on which the context is executed using malloc. > Because of this I also want to deallocate the memory again using free. > The problem is I can't deallocate the memory after swapping back. It > runs only if all three free() calls are commented out. Otherwise a > segmentation fault occurs. Does swapcontext handle this on its own? Can > anyone explain this behavior? I didn't find anything concerning this > problem in the web. >> I am running this program on Ubuntu 8.04 with the following system information: Linux > ubuntu8041 2.6.24-23-generic #1 SMP i686 GNU/Linux > > (...) > >> main_context = (ucontext*) malloc(sizeof(ucontext)); >> thread_context = (ucontext*) malloc(sizeof(ucontext)); > > changing: > > main_context = (ucontext_t*) malloc(sizeof(ucontext_t)); > thread_context = (ucontext_t*) malloc(sizeof(ucontext_t)); > > and compiling with free() I got: > > #./a.out > start > > Allocated memory: > main_context: 0x804b008 > thread_context: 0x804b168 > thread_stack: 0x804b2c8 > thread_function was called... > > swapcontext() returned. Freeing memory starts now... > thread_stack was deallocated... > thread_context was deallocated... > main_context was deallocated... > > I'm using glibc version 2.8. > > --tm > > > I think you should be able to free() them fine. Could you post a short bit of source that exhibits the problem? Also I tend to mmap() some anonymous memory instead of using malloc() for things like makecontext and sigaltstack. Because I want to put guard pages on my stacks due to them generally being very small. -- Jon Mayo <jon.mayo@xxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html