[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 03/10] pthread_sigmask: new module
From: |
Bruno Haible |
Subject: |
Re: [PATCH 03/10] pthread_sigmask: new module |
Date: |
Fri, 8 Jul 2011 01:52:47 +0200 |
User-agent: |
KMail/1.9.9 |
Paul Eggert wrote:
> 2011-07-05 Paul Eggert <address@hidden>
>
> + pthread_sigmask: new module
> + * MODULES.html.sh (Support for systems lacking POSIX:2008): Add it.
> + * doc/posix-functions/pthread_sigmask.texi: Document new module.
> + * lib/signal.in.h (pthread_sigmask): Arrange for replacement.
> + This is done only as a macro; I don't know how well that'll
> + work for C++. Move <sys/types.h> include before the include_next,
> + to avoid mishap on Solaris.
> + * m4/signal_h.m4 (gl_SIGNAL_H, gl_SIGNAL_H_DEFAULTS): Check for it.
> + * modules/signal (Makefile.am): Substitute the check's results.
> + * modules/pthread_sigmask, m4/pthread_sigmask.m4: New files.
This module has a number of problems:
1) wrong return value,
2) link errors in C++ mode,
3) portability problems to FreeBSD and others,
4) portability problems to OSF/1,
5) no unit test.
Let's start with the first one. POSIX specifies that pthread_sigmask returns
an error code. Unlike sigprocmask, which returns -1 when it fails.
This fixes it.
2011-07-07 Bruno Haible <address@hidden>
pthread_sigmask: Fix return value.
* lib/signal.in.h (pthread_sigmask): Declare. Don't define as a macro.
* lib/pthread_sigmask.c: New file.
* modules/pthread_sigmask (Files): Add it.
(configure.ac): Invoke AC_LIBOBJ.
============================ lib/pthread_sigmask.c ============================
/* POSIX compatible signal blocking for threads.
Copyright (C) 2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
/* Specification. */
#include <signal.h>
#include <errno.h>
int
pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask)
{
int ret = sigprocmask (how, new_mask, old_mask);
return (ret < 0 ? errno : 0);
}
===============================================================================
--- lib/signal.in.h.orig Fri Jul 8 01:44:55 2011
+++ lib/signal.in.h Fri Jul 8 01:42:35 2011
@@ -104,8 +104,8 @@
#if @GNULIB_PTHREAD_SIGMASK@
# if @REPLACE_PTHREAD_SIGMASK@
-# undef pthread_sigmask
-# define pthread_sigmask sigprocmask
+_GL_FUNCDECL_SYS (pthread_sigmask, int,
+ (int how, const sigset_t *new_mask, sigset_t *old_mask));
# endif
#elif defined GNULIB_POSIXCHECK
# undef pthread_sigmask
--- modules/pthread_sigmask.orig Fri Jul 8 01:44:55 2011
+++ modules/pthread_sigmask Fri Jul 8 01:43:33 2011
@@ -2,6 +2,7 @@
POSIX compatible signal blocking for threads.
Files:
+lib/pthread_sigmask.c
m4/pthread_sigmask.m4
Depends-on:
@@ -10,6 +11,9 @@
configure.ac:
gl_PTHREAD_SIGMASK
+if test $REPLACE_PTHREAD_SIGMASK = 1; then
+ AC_LIBOBJ([pthread_sigmask])
+fi
gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask])
Makefile.am:
--
In memoriam Georges Mandel <http://en.wikipedia.org/wiki/Georges_Mandel>
- [PATCH 03/10] pthread_sigmask: new module, Paul Eggert, 2011/07/06
- [PATCH] pthread_sigmask: always replace when not using pthread, Eric Blake, 2011/07/06
- unit tests for sigprocmask, Bruno Haible, 2011/07/07
- Re: [PATCH 03/10] pthread_sigmask: new module,
Bruno Haible <=
- Re: [PATCH 03/10] pthread_sigmask: new module, Paul Eggert, 2011/07/08
- Re: [PATCH 03/10] pthread_sigmask: new module, Bruno Haible, 2011/07/08
- Re: [PATCH 03/10] pthread_sigmask: new module, Paul Eggert, 2011/07/08
- Re: threadlib and emacs, Bruno Haible, 2011/07/08
- Re: threadlib and emacs, Paul Eggert, 2011/07/09
- Re: threadlib and emacs, Bruno Haible, 2011/07/09
- Re: threadlib and emacs, Paul Eggert, 2011/07/09
- Re: threadlib and emacs, Bruno Haible, 2011/07/12
- Re: threadlib and emacs, Paul Eggert, 2011/07/16
- Re: threadlib and emacs, Bruno Haible, 2011/07/17