Open p5pRT opened 10 years ago
I can't refactor this since this code doesn't exist on Win32. Hence this ticket. Read the // comments.
https://github.com/Perl/perl5/blob/fb29cc72fe9ef39100123477fffae4fad34866b7/mg.c#L1461
void
Perl_despatch_signals(pTHX)
{
dVAR;
int sig;
PL_sig_pending = 0;
for (sig = 1; sig < SIG_SIZE; sig++) {
if (PL_psig_pend[sig]) {
dSAVE_ERRNO;
#ifdef HAS_SIGPROCMASK
/* From sigaction(2) (FreeBSD man page):
* | Signal routines normally execute with the signal that
* | caused their invocation blocked, but other signals may
* | yet occur.
* Emulation of this behavior (from within Perl) is enabled
* using sigprocmask
*/
int was_blocked;
sigset_t newset, oldset;
sigemptyset(&newset);
sigaddset(&newset, sig);
sigprocmask(SIG_BLOCK, &newset, &oldset);
was_blocked = sigismember(&oldset, sig);
if (!was_blocked) {
//instead of SVs, why not Newx and SAVEFREEPV? or instead of SAVEFREEPV
put a Safefree into unblock_sigmask()?
SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t)); // dont
assign here
ENTER;
// save_sv = newSVpvn((char *)(&newset), // put me here
for locality.
SAVEFREESV(save_sv);
SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv)); //SvPVX since
no magic and gurenteed PV, and switch from SAVEDESTRUCTOR_X to
SAVEDESTRUCTOR since my_perl isn't used in unblock_sigmask
}
--------------------------------------------------------------------
#if defined HAS_SIGPROCMASK
static void
unblock_sigmask(pTHX_ void* newset) //remove pTHX_
{
sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
}
#endif
On Mon\, 27 Jan 2014 22:45:05 -0800\, bulk88 (via RT) \perlbug\-followup@​perl\.org wrote:
I can't refactor this since this code doesn't exist on Win32. Hence this ticket. Read the // comments.
Triggers twitching eye: // comment are a no-go: they will break many C89 compilers
-- H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/ using perl5.00307 .. 5.19 porting perl5 on HP-UX\, AIX\, and openSUSE http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/ http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/
The RT System itself - Status changed from 'new' to 'open'
The // comments were so that nobody gets really lazy and commits my comments unchanged as "todo"\, without reading the comments or ticket body.
-- bulk88 ~ bulk88 at hotmail.com
H.Merijn Brand wrote:
Triggers twitching eye: // comment are a no-go: they will break many C89 compilers
That's the point. These are to-do comments.
On Tue\, Jan 28\, 2014 at 7:45 AM\, bulk88 \perlbug\-followup@​perl\.org wrote:
//instead of SVs\, why not Newx and SAVEFREEPV? or instead of SAVEFREEPV put a Safefree into unblock_sigmask()?
Ehm\, I don't know. Probably I was so used to using SAVEFREESV that SAVEFREEPV didn't occur to me.
SV\* save\_sv = newSVpvn\(\(char \*\)\(&newset\)\,
sizeof(sigset_t)); // dont assign here ENTER; // save_sv = newSVpvn((char *)(&newset)\, // put me here for locality.
*Shrugs*
SAVEFREESV\(save\_sv\); SAVEDESTRUCTOR\_X\(unblock\_sigmask\, SvPV\_nolen\(save\_sv\)\);
//SvPVX since no magic and gurenteed PV\, and switch from SAVEDESTRUCTOR_X to SAVEDESTRUCTOR since my_perl isn't used in unblock_sigmask
Is there really any advantage of SAVEDESTRUCTOR over SAVEDESTRUCTOR_X? It's more of a habit of mine to avoid the former\, though in this case it doesn't really matter.
Leon
@Leont @bulk88 Is there a PR we can make from this or is this a dead discussion?
Migrated from rt.perl.org#121100 (status was 'open')
Searchable as RT121100$