* Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument
[not found] ` <4FC7533B.2060102@redhat.com>
@ 2012-06-01 9:52 ` Andreas Färber
2012-06-01 11:18 ` Markus Armbruster
0 siblings, 1 reply; 6+ messages in thread
From: Andreas Färber @ 2012-06-01 9:52 UTC (permalink / raw)
To: Igor Mammedov
Cc: aliguori, Igor Mitsyanko, alexander_barabash, Markus Armbruster,
qemu-devel, Paolo Bonzini
Am 31.05.2012 13:17, schrieb Igor Mammedov:
> On 05/31/2012 12:16 PM, Paolo Bonzini wrote:
>> Il 31/05/2012 10:30, Markus Armbruster ha scritto:
>>>>> Makes much sense, but maybe it should be done in OBJECT() cast? Assert
>>>>> when we do OBJECT(NULL).
>>> In my opinion, OBJECT(p) where p is a null pointer is perfectly valid
>>> and should yield a null pointer.
>>
>> Perhaps object_dynamic_cast and object_dynamic_cast_assert should do the
>> same?
>>
>
> or better object_dynamic_cast should return NULL if obj is NULL,
> after all it's expected that it may return NULL
That's what I was suggesting: I think that we should define "NULL is not
of type TYPE_FOO" and thus have the ..._is_... functions return false,
and have the ..._cast_assert assert.
So I still think this patch is correct. It could be accompanied by
further patches adding error handling in the remaining functions.
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument
[not found] ` <m3k3zswy4r.fsf@blackfin.pond.sub.org>
[not found] ` <4FC744FE.3030203@redhat.com>
@ 2012-06-01 9:57 ` Andreas Färber
1 sibling, 0 replies; 6+ messages in thread
From: Andreas Färber @ 2012-06-01 9:57 UTC (permalink / raw)
To: pbonzini
Cc: aliguori, Igor Mitsyanko, alexander_barabash, Markus Armbruster,
qemu-devel, Igor Mammedov
Am 31.05.2012 10:30, schrieb Markus Armbruster:
> Igor Mitsyanko <i.mitsyanko@samsung.com> writes:
>
>> On 05/30/2012 08:19 PM, Igor Mammedov wrote:
>>> without assert it will crash at following point:
>>> OBJECT_CHECK(type, obj, name) \
>>> ((type *)object_dynamic_cast_assert(OBJECT(obj), (name)))
>>> => object_dynamic_cast(obj, typename)
>>> => object_is_type(obj, target_type)
>>> => type_is_ancestor(obj->class->type, target_type);
>>> ^^^
>>> so abort earlier and print nice message instead of SIGSEGV
>>>
>>> Signed-off-by: Igor Mammedov<imammedo@redhat.com>
>>> ---
>>> qom/object.c | 2 ++
>>> 1 files changed, 2 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/qom/object.c b/qom/object.c
>>> index 00bb3b0..444e2fc 100644
>>> --- a/qom/object.c
>>> +++ b/qom/object.c
>>> @@ -481,6 +481,8 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename)
>>> {
>>> Object *inst;
>>>
>>> + g_assert(obj != NULL);
>>> +
>>> inst = object_dynamic_cast(obj, typename);
>>>
>>> if (!inst) {
>> Makes much sense, but maybe it should be done in OBJECT() cast? Assert
>> when we do OBJECT(NULL).
>
> In my opinion, OBJECT(p) where p is a null pointer is perfectly valid
> and should yield a null pointer.
Paolo, today OBJECT(p) is a pure C cast. I wonder if that was due to
TYPE_OBJECT being NULL at the time. Should we reconsider that on
qom-next with your patches to turn TYPE_OBJECT into a regular type?
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument
2012-06-01 9:52 ` [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument Andreas Färber
@ 2012-06-01 11:18 ` Markus Armbruster
2012-06-01 13:04 ` Andreas Färber
0 siblings, 1 reply; 6+ messages in thread
From: Markus Armbruster @ 2012-06-01 11:18 UTC (permalink / raw)
To: Andreas Färber
Cc: aliguori, Igor Mitsyanko, alexander_barabash, qemu-devel,
Paolo Bonzini, Igor Mammedov
Andreas Färber <afaerber@suse.de> writes:
> Am 31.05.2012 13:17, schrieb Igor Mammedov:
>> On 05/31/2012 12:16 PM, Paolo Bonzini wrote:
>>> Il 31/05/2012 10:30, Markus Armbruster ha scritto:
>>>>>> Makes much sense, but maybe it should be done in OBJECT() cast? Assert
>>>>>> when we do OBJECT(NULL).
>>>> In my opinion, OBJECT(p) where p is a null pointer is perfectly valid
>>>> and should yield a null pointer.
>>>
>>> Perhaps object_dynamic_cast and object_dynamic_cast_assert should do the
>>> same?
>>>
>>
>> or better object_dynamic_cast should return NULL if obj is NULL,
>> after all it's expected that it may return NULL
>
> That's what I was suggesting: I think that we should define "NULL is not
> of type TYPE_FOO" and thus have the ..._is_... functions return false,
> and have the ..._cast_assert assert.
Is it?
Igor: object_dynamic_cast should return NULL if obj is NULL,
You: have the ..._cast_assert assert [on null argument, I presume]
Doesn't sound like the same suggestion to me :)
If I understood you correctly: what do such assertions buy us other than
silliness like
p ? some_cast(p) : NULL
?
> So I still think this patch is correct. It could be accompanied by
> further patches adding error handling in the remaining functions.
I'm not convinced.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument
2012-06-01 11:18 ` Markus Armbruster
@ 2012-06-01 13:04 ` Andreas Färber
2012-06-04 7:39 ` Markus Armbruster
2012-06-04 13:14 ` Igor Mammedov
0 siblings, 2 replies; 6+ messages in thread
From: Andreas Färber @ 2012-06-01 13:04 UTC (permalink / raw)
To: Markus Armbruster
Cc: aliguori, Igor Mitsyanko, alexander_barabash, qemu-devel,
Paolo Bonzini, Igor Mammedov
Am 01.06.2012 13:18, schrieb Markus Armbruster:
> Andreas Färber <afaerber@suse.de> writes:
>
>> Am 31.05.2012 13:17, schrieb Igor Mammedov:
>>> On 05/31/2012 12:16 PM, Paolo Bonzini wrote:
>>>> Il 31/05/2012 10:30, Markus Armbruster ha scritto:
>>>>>>> Makes much sense, but maybe it should be done in OBJECT() cast? Assert
>>>>>>> when we do OBJECT(NULL).
>>>>> In my opinion, OBJECT(p) where p is a null pointer is perfectly valid
>>>>> and should yield a null pointer.
>>>>
>>>> Perhaps object_dynamic_cast and object_dynamic_cast_assert should do the
>>>> same?
>>>>
>>>
>>> or better object_dynamic_cast should return NULL if obj is NULL,
>>> after all it's expected that it may return NULL
>>
>> That's what I was suggesting: I think that we should define "NULL is not
>> of type TYPE_FOO" and thus have the ..._is_... functions return false,
>> and have the ..._cast_assert assert.
>
> Is it?
See http://www.mail-archive.com/qemu-devel@nongnu.org/msg113922.html
> Igor: object_dynamic_cast should return NULL if obj is NULL,
>
> You: have the ..._cast_assert assert [on null argument, I presume]
>
> Doesn't sound like the same suggestion to me :)
I'll let you to your opinion. :) However, my opinion is that
object_dynamic_cast_assert() should assert (its name should be program),
not segfault, and that
object_dynamic_cast()/object_is_type()/type_is_ancestor() should not
assert but return false / NULL. So as to the effects and usability that
pretty much aligns with Igor M., no?
> If I understood you correctly: what do such assertions buy us other than
> silliness like
>
> p ? some_cast(p) : NULL
>
> ?
Nack. The point is that currently deployed MY_TYPE(x) should assert
(because nobody expects it to return NULL) and he who does want to
handle NULL can use object_dynamic_cast(p). There's no real change to
what we have except that an error case that was unhandled now is handled.
>> So I still think this patch is correct. It could be accompanied by
>> further patches adding error handling in the remaining functions.
>
> I'm not convinced.
Shed any light?
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument
2012-06-01 13:04 ` Andreas Färber
@ 2012-06-04 7:39 ` Markus Armbruster
2012-06-04 13:14 ` Igor Mammedov
1 sibling, 0 replies; 6+ messages in thread
From: Markus Armbruster @ 2012-06-04 7:39 UTC (permalink / raw)
To: Andreas Färber
Cc: aliguori, Igor Mitsyanko, alexander_barabash, qemu-devel,
Paolo Bonzini, Igor Mammedov
Andreas Färber <afaerber@suse.de> writes:
> Am 01.06.2012 13:18, schrieb Markus Armbruster:
>> Andreas Färber <afaerber@suse.de> writes:
>>
>>> Am 31.05.2012 13:17, schrieb Igor Mammedov:
>>>> On 05/31/2012 12:16 PM, Paolo Bonzini wrote:
>>>>> Il 31/05/2012 10:30, Markus Armbruster ha scritto:
>>>>>>>> Makes much sense, but maybe it should be done in OBJECT() cast? Assert
>>>>>>>> when we do OBJECT(NULL).
>>>>>> In my opinion, OBJECT(p) where p is a null pointer is perfectly valid
>>>>>> and should yield a null pointer.
>>>>>
>>>>> Perhaps object_dynamic_cast and object_dynamic_cast_assert should do the
>>>>> same?
>>>>>
>>>>
>>>> or better object_dynamic_cast should return NULL if obj is NULL,
>>>> after all it's expected that it may return NULL
>>>
>>> That's what I was suggesting: I think that we should define "NULL is not
>>> of type TYPE_FOO" and thus have the ..._is_... functions return false,
>>> and have the ..._cast_assert assert.
>>
>> Is it?
>
> See http://www.mail-archive.com/qemu-devel@nongnu.org/msg113922.html
>
>> Igor: object_dynamic_cast should return NULL if obj is NULL,
>>
>> You: have the ..._cast_assert assert [on null argument, I presume]
>>
>> Doesn't sound like the same suggestion to me :)
>
> I'll let you to your opinion. :) However, my opinion is that
My question isn't about a difference of opinions between us two. It's
about Igor writing "X should do Y", and you replying "Yes, that's what I
was suggesting, X should do !Y". There's a misunderstanding there, and
it could well be mine. So I ask.
[...]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument
2012-06-01 13:04 ` Andreas Färber
2012-06-04 7:39 ` Markus Armbruster
@ 2012-06-04 13:14 ` Igor Mammedov
1 sibling, 0 replies; 6+ messages in thread
From: Igor Mammedov @ 2012-06-04 13:14 UTC (permalink / raw)
To: Andreas Färber
Cc: aliguori, Igor Mitsyanko, alexander_barabash, Markus Armbruster,
qemu-devel, Paolo Bonzini
On 06/01/2012 03:04 PM, Andreas Färber wrote:
> Am 01.06.2012 13:18, schrieb Markus Armbruster:
>> Andreas Färber<afaerber@suse.de> writes:
>>
>>> Am 31.05.2012 13:17, schrieb Igor Mammedov:
>>>> On 05/31/2012 12:16 PM, Paolo Bonzini wrote:
>>>>> Il 31/05/2012 10:30, Markus Armbruster ha scritto:
>>>>>>>> Makes much sense, but maybe it should be done in OBJECT() cast? Assert
>>>>>>>> when we do OBJECT(NULL).
>>>>>> In my opinion, OBJECT(p) where p is a null pointer is perfectly valid
>>>>>> and should yield a null pointer.
>>>>>
>>>>> Perhaps object_dynamic_cast and object_dynamic_cast_assert should do the
>>>>> same?
>>>>>
>>>>
>>>> or better object_dynamic_cast should return NULL if obj is NULL,
>>>> after all it's expected that it may return NULL
>>>
>>> That's what I was suggesting: I think that we should define "NULL is not
>>> of type TYPE_FOO" and thus have the ..._is_... functions return false,
>>> and have the ..._cast_assert assert.
>>
>> Is it?
>
> See http://www.mail-archive.com/qemu-devel@nongnu.org/msg113922.html
>
>> Igor: object_dynamic_cast should return NULL if obj is NULL,
>>
>> You: have the ..._cast_assert assert [on null argument, I presume]
>>
>> Doesn't sound like the same suggestion to me :)
>
> I'll let you to your opinion. :) However, my opinion is that
> object_dynamic_cast_assert() should assert (its name should be program),
> not segfault, and that
> object_dynamic_cast()/object_is_type()/type_is_ancestor() should not
> assert but return false / NULL. So as to the effects and usability that
> pretty much aligns with Igor M., no?
If we decide that object_dynamic_cast() should not assert but rather return NULL
the this block in it will be incorrect in to places:
if (object_is_type(obj, type_interface)) {
assert(!obj->interfaces); <== could be replaced with return NULL
obj = INTERFACE(obj)->obj; <== calls OBJECT_CHECK() -> object_dynamic_cast_assert ()
...
[snip]
maybe there should be INTERFACE_CHECK and INTERFACE macros calling ..._assert and non assert variants respectively?
>
>> If I understood you correctly: what do such assertions buy us other than
>> silliness like
>>
>> p ? some_cast(p) : NULL
>>
>> ?
>
> Nack. The point is that currently deployed MY_TYPE(x) should assert
> (because nobody expects it to return NULL) and he who does want to
> handle NULL can use object_dynamic_cast(p). There's no real change to
> what we have except that an error case that was unhandled now is handled.
>
>>> So I still think this patch is correct. It could be accompanied by
>>> further patches adding error handling in the remaining functions.
>>
>> I'm not convinced.
>
> Shed any light?
>
> Andreas
>
--
-----
Igor
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-06-04 13:15 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1338394747-17427-1-git-send-email-imammedo@redhat.com>
[not found] ` <4FC6533C.3010207@samsung.com>
[not found] ` <m3k3zswy4r.fsf@blackfin.pond.sub.org>
[not found] ` <4FC744FE.3030203@redhat.com>
[not found] ` <4FC7533B.2060102@redhat.com>
2012-06-01 9:52 ` [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument Andreas Färber
2012-06-01 11:18 ` Markus Armbruster
2012-06-01 13:04 ` Andreas Färber
2012-06-04 7:39 ` Markus Armbruster
2012-06-04 13:14 ` Igor Mammedov
2012-06-01 9:57 ` Andreas Färber
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).