Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Sep 2001 20:32:35 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Terry Lambert <tlambert2@mindspring.com>
Cc:        Mikhail Teterin <mi@aldan.algebra.com>, <asmodai@wxs.nl>, <current@FreeBSD.ORG>, <arch@FreeBSD.ORG>
Subject:   Re: proctitle progress reporting for dump(8)
Message-ID:  <20010905201754.U22592-100000@alphplex.bde.org>
In-Reply-To: <3B95DB53.13AE8B42@mindspring.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 5 Sep 2001, Terry Lambert wrote:

> Mikhail Teterin wrote:
> > > Also,  printf()  allocates  memory  for floating  point,  so  if  that
> > > percentage is  a floating  point calculation, then  you are  in double
> > > trouble,  since you  are  not allowed  to call  malloc()  in a  signal
> > > handler.
> >
> > That's interesting... I can modify it  a bit, to round the percentage to
> > fit the %d if called as a signal handler. Thanks. Anything else?
>
> If setproctitle() calls malloc/strsave/etc., it is not safe
> to call in a signal handler.

Neither is setproctitle() (since it is not in the list of functions that
are safe to call in a signal handler), so this is moot.

> I'm not saying it does, I'm saying I haven't looked at the
> code in libc for the function, and you should, before using
> it in a signal handler...

setproctitle() directly calls the following functions that are not safe
to call in a signal handler (since they are not in the magic list).

    snprintf, strlen, vsnprintf, sysctl, sysctlbyname

I think all of these are safe in practice.

It also accesses some variables that are not safe to access in a signal
handler (non-auto ones that are not of type "volatile sig_atomic_t" or
are accessed by reads).  This is unsafe in practice.  E.g., concurrent
calls to setproctitle() might corrupt the state of the ps_strings variable.

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010905201754.U22592-100000>