[lvm-devel] Question about destroy_toolcontext()
Zdenek Kabelac
zkabelac at redhat.com
Wed Aug 17 09:06:47 UTC 2016
Dne 17.8.2016 v 11:04 Liuhua Wang napsal(a):
> Hi Peter,
>
> I read the source of lib/commands/toolcontext.c
> and have a question about the following lines:
>
> ----------------------------
> void destroy_toolcontext(struct cmd_context *cmd){
>
> [snip]
>
> #ifndef VALGRIND_POOL
> if (cmd->linebuffer) {
> /* Reset stream buffering to defaults */
> if (is_valid_fd(STDIN_FILENO) &&
> ((flags = fcntl(STDIN_FILENO, F_GETFL)) > 0) &&
> (flags & O_ACCMODE) != O_WRONLY) {
> if (_reopen_stream(stdin, STDIN_FILENO, "r", "stdin", &new_stream)) {
> stdin = new_stream;
> setlinebuf(stdin);
> } else
> cmd->linebuffer = NULL; /* Leave buffer in place (deliberate leak) */
> }
>
> if (is_valid_fd(STDOUT_FILENO) &&
> ((flags = fcntl(STDOUT_FILENO, F_GETFL)) > 0) &&
> (flags & O_ACCMODE) != O_RDONLY) {
> if (_reopen_stream(stdout, STDOUT_FILENO, "w", "stdout", &new_stream)) {
> stdout = new_stream;
> setlinebuf(stdout);
> } else
> cmd->linebuffer = NULL; /* Leave buffer in place (deliberate leak) */
> }
>
> dm_free(cmd->linebuffer);
> }
> #endif
> -------------------------------
> when cmd->linebuffer is NULL and then dm_free(cmd->linebuffer),
> won't it make it segfault?
dm_free() accepts NULL (just like 'free()' - for details see: man 3 free.
Regards
Zdenek
More information about the lvm-devel
mailing list