[PATCH weston-ivi-shell 04/15] ivi-shell supports a type of shell for In-Vehicle Infotainment system.
Nobuhiko Tanibata
nobuhiko_tanibata at xddp.denso.co.jp
Tue Mar 11 16:50:18 PDT 2014
2014-03-12 04:10 に Bill Spitzak さんは書きました:
> Pekka Paalanen wrote:
>
>>>>> + wl_list_for_each(seat, &ec->seat_list, link) {
>>>>> + if (seat) {
>>>>> + shell->seat = seat;
>>>> 'seat' cannot be NULL here. It seems you are assuming that there can
>>>> be
>>>> only one seat? Why?
>>>>
>>> Ideally, I agree. However I am in automotive software, and I have
>>> habit to avoid NULL access as much as possible in case of the worst
>>> scenario.
>>
>> Then put an assert(), though in this case even that would be too much.
>> You can never get a NULL from wl_list_for_each(). You might get a bad
>> pointer if the list is corrupted, but the odds of getting exactly NULL
>> are diminishing even with corruption.
>>
>> Silently ignoring NULLs where they should never appear may hide real
>> problems in testing, and even in production you'd probably want to log
>> it somehow to help post mortem.
>
> In addition, seeing an "if (x)" is a strong indication to the
> programmer that x *can* be NULL, and they will then make modifications
> to perceived bugs on the assumption that NULL is a possible value.
> This often leads to this same mistake being propagated to every
> function called by this and every use of a variable this value is
> stored into.
>
> An assert(x) however is a strong indication that x is *not* NULL.
>
> If you really are tempted to make a test so that if you missed a bug
> there is less chance of the optimized program crashing, what I do is
> something like this:
>
> assert(x);
> if (!x) return; // THIS SHOULD NOT HAPPEN
Hi pq and Bill,
Thank you a lot. I will follow the above way.
BR,
Nobuhiko
More information about the wayland-devel
mailing list