----- Original Message ----- > When the crash command line includes two filenames where one is a > compressed kernel and the other is a debuginfo file and they appear in > that order then if the uncompressed temporary version of the kernel is > actually larger than the debuginfo then crash will end with an error but > will also unlink the debuginfo file and will not clean up the (intended > temporary) uncompressed copy of the kernel. Hi Dave, It's taken me awhile to wrap my head around this, but my first question is: how is it possible that the uncompressed stripped kernel can possibly be larger than the debuginfo file? I only have old RHEL3 kernels as examples, but the .debug versions of the kernel are 5 to 6 times larger than the stripped kernel. > This patch at least fixes the unintended unlink and leaving the > temporary present. It doesn't fix the failure to start but that's > because the wrong files are assumed the debuginfo and kernel. The size > case that led to this discovery is probably rare. Is the unintended unlink() done in the first display_sys_stats() or in clean_exit()? And then with your fix applied, why does the crash session still fail? Dave > The cause is that evidence of a temporary file to unlink is that there > is a value in pc->namelist and pc->namelist_orig (or pc->namelist_debug > and pc->namelist_orig_debug) but when the file size test in > select_namelist() results in the pc->namelist copy to pc->namelist_debug > the _orig is not copied as well so the implied file to unlink is the one > set in pc->namelist (the debuginfo filename now). > > The patch causes a populated namelist_orig value to be swapped with > namelist_debug_orig if the namelist value is copied to namelist_debug. > > Signed-off-by: David Mair <dmair@xxxxxxxx> > --- > symbols.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/symbols.c b/symbols.c > index 4c6fbf4..e1ed719 100644 > --- a/symbols.c > +++ b/symbols.c > @@ -3520,6 +3520,7 @@ int > select_namelist(char *new) > { > struct stat stat1, stat2; > + char *namecp; > > if (pc->server_namelist) { > pc->namelist_debug = new; > @@ -3533,6 +3534,12 @@ select_namelist(char *new) > > if (stat1.st_size > stat2.st_size) { > pc->namelist_debug = pc->namelist; > + if (pc->namelist_orig) > + { > + namecp = pc->namelist_debug_orig; > + pc->namelist_debug_orig = pc->namelist_orig; > + pc->namelist_orig = namecp; > + } > pc->namelist = new; > } else if (stat2.st_size > stat1.st_size) > pc->namelist_debug = new; > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility