Messages in this thread | | | Subject | Re: Hopefully, kmalloc() will always succeed, but if it doesn't then.... | From | Roland Dreier <> | Date | Sun, 22 Oct 2006 17:25:30 -0700 |
| |
> struct mixart_enum_connector_resp *connector; > struct mixart_audio_info_req *audio_info_req; > struct mixart_audio_info_resp *audio_info; > > connector = kmalloc(sizeof(*connector), GFP_KERNEL); > audio_info_req = kmalloc(sizeof(*audio_info_req), GFP_KERNEL); > audio_info = kmalloc(sizeof(*audio_info), GFP_KERNEL); > if (! connector || ! audio_info_req || ! audio_info) { > err = -ENOMEM; > goto __error; > }
This is not a bug. All of the pointers are initialized, and if kmalloc() fails, then one of them will be set to NULL. However, kfree(NULL) is a perfectly fine thing to do (kfree just returns immediately in this case).
So this is just a way of saving some tests and optimizing for the common case when all allocations succeed. In other words, this is good code -- although the spacing is slightly bogus: it should be
if (!connector || !audio_info_req || !audio_info) {
and also using __error as a label is slightly silly -- why not just make it "error"?
- R. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |