Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore
Modified Files:
ecore_main.c ecore_signal.c
Log Message:
use pselect - from lars. testing now in a wider audience.
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_main.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- ecore_main.c 26 Jan 2008 10:11:48 -0000 1.33
+++ ecore_main.c 24 Feb 2008 04:56:28 -0000 1.34
@@ -284,34 +284,35 @@
static int
_ecore_main_select(double timeout)
{
- struct timeval tv, *t;
- fd_set rfds, wfds, exfds;
- int max_fd;
- int ret;
- Ecore_List2 *l;
+ sigset_t emptyset;
+ struct timespec ts, *t;
+ fd_set rfds, wfds, exfds;
+ int max_fd;
+ int ret;
+ Ecore_List2 *l;
t = NULL;
if ((!finite(timeout)) || (timeout == 0.0)) /* finite() tests for NaN, too
big, too small, and infinity. */
{
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- t = &tv;
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+ t = &ts;
}
else if (timeout > 0.0)
{
- int sec, usec;
+ int sec, nsec;
#ifdef FIX_HZ
timeout += (0.5 / HZ);
sec = (int)timeout;
- usec = (int)((timeout - (double)sec) * 1000000);
+ nsec = (int)((timeout - (double)sec) * 1000000000);
#else
sec = (int)timeout;
- usec = (int)((timeout - (double)sec) * 1000000);
+ nsec = (int)((timeout - (double)sec) * 1000000000);
#endif
- tv.tv_sec = sec;
- tv.tv_usec = usec;
- t = &tv;
+ ts.tv_sec = sec;
+ ts.tv_nsec = nsec;
+ t = &ts;
}
max_fd = 0;
FD_ZERO(&rfds);
@@ -350,7 +351,9 @@
}
}
if (_ecore_signal_count_get()) return -1;
- ret = select(max_fd + 1, &rfds, &wfds, &exfds, t);
+ sigemptyset(&emptyset);
+ ret = pselect(max_fd + 1, &rfds, &wfds, &exfds, t, &emptyset);
+
if (ret < 0)
{
if (errno == EINTR) return -1;
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_signal.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -3 -r1.35 -r1.36
--- ecore_signal.c 26 Aug 2007 11:17:21 -0000 1.35
+++ ecore_signal.c 24 Feb 2008 04:56:28 -0000 1.36
@@ -113,10 +113,32 @@
void
_ecore_signal_init(void)
{
+ sigset_t blockset;
+ int ret;
#ifdef SIGRTMIN
int i, num = SIGRTMAX - SIGRTMIN;
#endif
+ sigemptyset(&blockset);
+ sigaddset(&blockset, SIGPIPE);
+ sigaddset(&blockset, SIGALRM);
+ sigaddset(&blockset, SIGCHLD);
+ sigaddset(&blockset, SIGUSR1);
+ sigaddset(&blockset, SIGUSR2);
+ sigaddset(&blockset, SIGHUP);
+ sigaddset(&blockset, SIGQUIT);
+ sigaddset(&blockset, SIGINT);
+ sigaddset(&blockset, SIGTERM);
+#ifdef SIGPWR
+ sigaddset(&blockset, SIGPWR);
+#endif
+
+#ifdef SIGRTMIN
+ for (i = 0; i < num; i++)
+ sigaddset(&blockset, SIGRTMIN + i);
+#endif
+ sigprocmask(SIG_BLOCK, &blockset, NULL);
+
_ecore_signal_callback_set(SIGPIPE, _ecore_signal_callback_ignore);
_ecore_signal_callback_set(SIGALRM, _ecore_signal_callback_ignore);
_ecore_signal_callback_set(SIGCHLD, _ecore_signal_callback_sigchld);
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs