delete_io_handle: fix deletion of last handle
authorDaniel Drake <dsd@laptop.org>
Fri, 25 Nov 2011 18:28:48 +0000 (12:28 -0600)
committerDaniel Drake <dsd@laptop.org>
Mon, 28 Nov 2011 14:31:12 +0000 (08:31 -0600)
commita798395a1bfd9d06d40e2d8d14377a156c94429a
treef9007478a5addd6e1194317690343366bad52e4a
parent2601ddd02d608c16b0022fe342e0a3f4bf6cadeb
delete_io_handle: fix deletion of last handle

When num_ios goes from 1 to 0, a realloc(ios, 0); call is made.
This is equivalent to free(ios) and NULL is returned.

However, the previous logic in the code incorrectly discards this NULL
return value. When we next call new_io_handle(), realloc(ios, X) is
called with "ios" pointing to freed memory. This causes glibc to abort.

Correct this logic to detect the 1-to-0 case and handle it correctly.
Other cases are unchanged; there is still value in checking the
return value from realloc() as it also returns NULL on error.

Signed-off-by: Daniel Drake <dsd@laptop.org>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
src/common_io.c