[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Build broken
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] Build broken |
Date: |
Fri, 5 Aug 2011 09:48:49 +0100 |
On Fri, Aug 5, 2011 at 8:29 AM, Kevin Wolf <address@hidden> wrote:
> Am 05.08.2011 08:22, schrieb malc:
>>
>> /home/malc/x/rcs/git/qemuorg/coroutine-ucontext.c: In function
>> 'coroutine_new':
>> /home/malc/x/rcs/git/qemuorg/coroutine-ucontext.c:160:16: error: 'arg.i[1]'
>> may be used uninitialized in this function
>> /home/malc/x/rcs/git/qemuorg/coroutine-ucontext.c:136:18: note: 'arg.i[1]'
>> was declared here
>>
>> diff --git a/coroutine-ucontext.c b/coroutine-ucontext.c
>> index 41c2379..42dc3e2 100644
>> --- a/coroutine-ucontext.c
>> +++ b/coroutine-ucontext.c
>> @@ -133,7 +133,7 @@ static Coroutine *coroutine_new(void)
>> CoroutineUContext *co;
>> ucontext_t old_uc, uc;
>> jmp_buf old_env;
>> - union cc_arg arg;
>> + union cc_arg arg = {0};
>>
>> /* The ucontext functions preserve signal masks which incurs a system
>> call
>> * overhead. setjmp()/longjmp() does not preserve signal masks but only
>>
>> I guess gcc should yell not only here on ppc32 but on any machine where
>> pointer size is less than the size of two ints.
>
> Stefan, why does this code even exist again? I think at some point I had
> it changed to just use a static variable in order to avoid doing this
> kind of tricks with unions.
virtfs are using coroutines in multiple threads at the same time.
Introducing a global variable wouldn't be thread-safe.
The real problem is that makecontext(3) has a bad function signature.
There's no nice fix - whatever we do will be ugly.
Using a union is the way it should be done in C. The code doesn't
look pretty but it doesn't introduce global state.
Stefan