Re: GMAKE 3.81 vs GMAKE 4.2

nikhil jain <[email protected]>
Newsgroups gmane.comp.gnu.make.general
Message-ID <CAP-pfRWD5y5bs6h3VLX=A_xqbYmf=pgrciydoiCegnH1nD2D3w@mail.gmail.com>
Thanks Paul, I know we can’t use standard C functions. The only reason I
wanted to check here is whether the parent make is also getting ctrl+c (
which it isn’t). Do you suggest calling die from within fatal signal
handler ?

My requirement is to perform a task( write to a file)  only ONCE when I
give ctrl C . Which place in the code is best to do so?

Thanks
Nikhil

On Sun, 22 May 2022 at 4:57 AM, Paul Smith <[email protected]> wrote:

> On Sat, 2022-05-21 at 08:37 +0530, nikhil jain wrote:
> > Also, fatal error handler in commands.C gets called multiple times. I
> > believe it is getting called for each parallel make process the
> > parent has invoked.
>
> Certainly.  When you press ^C make will propagate that signal to all
> its children so that any compile commands, etc. are properly killed.
> This is an absolute requirement: you don't want your compiler to keep
> running after you've killed make!
>
> This means every sub-make (which is just another recipe to run, to
> make) will also receive a SIGINT.
>
> > 1) why the die() function is not getting called after a ctrl+c ?
>
> Sorry, I misread the code.  I thought that the fatal function would
> invoke die() (eventually) but I see now that that only happens if it
> fails to kill itself the "normal" way.
>
> So make will exit through die() for "normal" exits and through the
> fatal function for exits caused by signals (like ^C).  Two different
> places.
>
> > 2) why I am not able to printf anything in fatal error handler in
> > commands.c ? I do printf but it doesn’t print on the screen. The
> > stdout is gone?
>
> This method is invoked inside a signal handler.  You cannot, generally,
> use standard C runtime functions such as printf() inside a signal
> handler.  Because a signal is asynchronous, it could interrupt ANY
> operation including right in the middle of a malloc() call or free() or
> some other printf(), etc. and you can't assume anything about the state
> of the program.
>
> There are a limited number of system calls you can invoke from within a
> signal handler.  Knowing how to write good signal handler code is an
> entire area of study and not related to GNU make really.  There are
> docs and tutorials on it out there.
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.