Re: Possible endless loop in lto-wrapper
> Hi Rafael, > > I'm sorry I cannot try the patch until next weekend. > However, from a first look, it should work but I wonder: if the first > maybe_unlink_file fails the others are never reached, leaving some > temporary files in place. Is this ok? > Yes, I talked with Diego and he thinks that this is an unusual case and it is better to just give up when the first unlink fails. I have committed the patch, let me know if you see any issues. > Thank you, > Leandro > -- > Caselle da 1GB, trasmetti allegati fino a 3GB e in piu' IMAP, POP3 e SMTP > autenticato? GRATIS solo con Email.it: http://www.email.it/f > Cheers, -- Rafael Ávila de Espíndola
Re: Possible endless loop in lto-wrapper
On Mon, Nov 23, 2009 at 13:59, Rafael Espindola wrote: > 2009-11-23 Rafael Avila de Espindola > > * lto-wrapper.c (lto_wrapper_exit): Don't try to delete files if > being called recursively. OK. Diego.
Re: Possible endless loop in lto-wrapper
2009/11/22 Leandro Nini : > Hi, > > in gcc-4.5 lto-wrapper may end up in an endless loop in case of error: > > if for example a 'maybe_unlink_file' call from 'lto_wrapper_exit' fails it > calls 'fatal_perror' which in turn calls 'lto_wrapper_exit' again causing > an infinity of > > lto-wrapper: deleting LTRANS file /tmp/ccWjXUv8.lto.o: No such file or > directory > > error messages on the console. > > I've solved this by substituting 'maybe_unlink_file' with > 'unlink_if_ordinary' > whithin the 'lto_wrapper_exit' function. > Not sure if this is the best fix but hope it helps. Thanks for finding the bug! I think that we need something similar to what was done in the linker: Avoid trying to start a new cleanup if we are already in one. Leandro, can you try the attached patch? Diego, OK if it works? 2009-11-23 Rafael Avila de Espindola * lto-wrapper.c (lto_wrapper_exit): Don't try to delete files if being called recursively. > > Best Regards, > Leandro > -- Cheers, -- Rafael Ávila de Espíndola Index: gcc/lto-wrapper.c === --- gcc/lto-wrapper.c (revision 154452) +++ gcc/lto-wrapper.c (working copy) @@ -66,12 +66,20 @@ static void lto_wrapper_exit (int status) { - if (ltrans_output_file) -maybe_unlink_file (ltrans_output_file); - if (flto_out) -maybe_unlink_file (flto_out); - if (args_name) -maybe_unlink_file (args_name); + static bool cleanup_done = false; + if (!cleanup_done) +{ + /* Setting cleanup_done prevents an infinite loop if one of the + calls to maybe_unlink_file fails. */ + cleanup_done = true; + + if (ltrans_output_file) +maybe_unlink_file (ltrans_output_file); + if (flto_out) +maybe_unlink_file (flto_out); + if (args_name) +maybe_unlink_file (args_name); +} exit (status); }
Possible endless loop in lto-wrapper
Hi, in gcc-4.5 lto-wrapper may end up in an endless loop in case of error: if for example a 'maybe_unlink_file' call from 'lto_wrapper_exit' fails it calls 'fatal_perror' which in turn calls 'lto_wrapper_exit' again causing an infinity of lto-wrapper: deleting LTRANS file /tmp/ccWjXUv8.lto.o: No such file or directory error messages on the console. I've solved this by substituting 'maybe_unlink_file' with 'unlink_if_ordinary' whithin the 'lto_wrapper_exit' function. Not sure if this is the best fix but hope it helps. Best Regards, Leandro -- Caselle da 1GB, trasmetti allegati fino a 3GB e in piu' IMAP, POP3 e SMTP autenticato? GRATIS solo con Email.it: http://www.email.it/f Sponsor: Vinci subito fantastici premi, partecipando al gioco "alla faccia degli amici" crea la faccia di chi vuoi tu e gioca! Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=9867&d=20091122