[lvm-devel] Question about destroy_toolcontext()
Liuhua Wang
lwang at suse.com
Wed Aug 17 09:04:24 UTC 2016
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?
Thanks!
Liuhua
More information about the lvm-devel
mailing list