Re: swapcontext and free memory

Jon Mayo <[email protected]>
Newsgroups org.kernel.vger.linux-c-programming
Message-ID <[email protected]>
On Wed, Mar 18, 2009 at 12:22 PM, Tiago Maluta
<[email protected]> wrote:
> [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
>
>
>

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
<[email protected]>
--
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
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.