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
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to