Re: swapcontext and free memory

Tiago Maluta <[email protected]>
Newsgroups org.kernel.vger.linux-c-programming
Message-ID <[email protected]>
[email protected] 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.