select/poll and Signal Safety


 
Thread Tools Search this Thread
Top Forums Programming select/poll and Signal Safety
# 1  
Old 01-27-2006
select/poll and Signal Safety

Hi

I am struggling to understand why one should use pselect()/ppoll() instead of wrapping an ordinary select() or poll() call around sigprocmask(). The linux man page talks about “race conditions”, but how would such dangers occur?

I plan to use poll() for an application (since ppoll() isn't widely supported) but wish to know how (if possible) it can be made signal safe? please see preliminary code scenario below.

Code:
void foofunc() {
	int retval;

	sigprocmask(...); // block certain signals

	...

	while(1) {
		sigprocmask(...); // set empty mask

		// <- can something go wrong here?

		retval = poll(...); // wait indefinitely

		// <- and what about here?

		sigprocmask(...); // restore old mask

		if (retval != -1) {
			... // handle file descriptor events
		} else (errno == EINTR) {
			// just signal interruptions, don't panic
		} else {
			... // handle error
		}
	}
}

Any help is greatly appreciated.
Login or Register to Ask a Question

Previous Thread | Next Thread

6 More Discussions You Might Find Interesting

1. Solaris

SUNFIRE V240 procedure to shutdown with safety in order to replace power cables

Question: Which commands to use to shutdown with safety the server; (2 Replies)
Discussion started by: doudou2012
2 Replies

2. Shell Programming and Scripting

How to use poll() for I/O multiplex

Hi, guys: I want to write my own shell using C. I am confused about the usage of I/O multiplex. Does anyone know some examples or explain it to me ? Thanks so much (1 Reply)
Discussion started by: tomlee
1 Replies

3. Programming

POSIX threads and data safety

I created multiple POSIX threads (on readhat Linux) in a C program in my app. What I am doing is - I am creating threads equal to the number of CPUs in the system and and equal number of instances of a certain data structure, basically a queue implementation. I am assigning one ID to the thread... (2 Replies)
Discussion started by: radiatejava
2 Replies

4. IP Networking

select vs poll

Hi, Off late I had been looking at the differences b/w select() & poll() system calls. The requirement is to reduce the overhead, processor power in waiting for the data. In the kind of connections under consideration there would be very frequent data arriving on the sockets, so poll() fares... (12 Replies)
Discussion started by: smanu
12 Replies

5. UNIX for Dummies Questions & Answers

Replace select/poll with kqueue/kevent

Hi, As far as I known, kqueue/kevent model can be used to improve the efficiency of systems event dispatching. I m wondering whether kqueue/kevent is same as the real-time OS event model. I also want to know when writing multiplexing app in real-time OS, what APIs need to be used for... (1 Reply)
Discussion started by: bsderss
1 Replies

6. Programming

How to convert the "select" function into a "poll" function

i have a program using the select function but i want to convert it to poll... how can i do this? thanks in advance... :) (1 Reply)
Discussion started by: rbolante
1 Replies
Login or Register to Ask a Question
PSELECT(2)						      BSD System Calls Manual							PSELECT(2)

NAME
pselect -- synchronous I/O multiplexing a la POSIX.1g LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <sys/select.h> int pselect(int nfds, fd_set * restrict readfds, fd_set * restrict writefds, fd_set * restrict exceptfds, const struct timespec * restrict timeout, const sigset_t * restrict newsigmask); DESCRIPTION
The pselect() function was introduced by IEEE Std 1003.1g-2000 (``POSIX.1'') as a slightly stronger version of select(2). The nfds, readfds, writefds, and exceptfds arguments are all identical to the analogous arguments of select(). The timeout argument in pselect() points to a const struct timespec rather than the (modifiable) struct timeval used by select(); as in select(), a null pointer may be passed to indicate that pselect() should wait indefinitely. Finally, newsigmask specifies a signal mask which is set while waiting for input. When pselect() returns, the original signal mask is restored. See select(2) for a more detailed discussion of the semantics of this interface, and for macros used to manipulate the fd_set data type. RETURN VALUES
The pselect() function returns the same values and under the same conditions as select(). ERRORS
The pselect() function may fail for any of the reasons documented for select(2) and (if a signal mask is provided) sigprocmask(2). SEE ALSO
kqueue(2), poll(2), select(2), sigprocmask(2) STANDARDS
The pselect() function conforms to IEEE Std 1003.1-2001 (``POSIX.1''). HISTORY
The pselect() function first appeared in FreeBSD 5.0. AUTHORS
The first implementation of pselect() function and this manual page were written by Garrett Wollman <wollman@FreeBSD.org>. BSD
October 27, 2009 BSD