]> git.llucax.com Git - software/libev.git/blobdiff - ev.c
*** empty log message ***
[software/libev.git] / ev.c
diff --git a/ev.c b/ev.c
index 255bb8457de54795ccc86bf3057729f288cff9f6..53491e1130c6c2c7093b1fd52d7f213ac2a32cd4 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -147,6 +147,12 @@ typedef struct ev_watcher_time *WT;
 
 static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
 
 
 static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
 
+#if WIN32
+/* note: the comment below could not be substantiated, but what would I care */
+/* MSDN says this is required to handle SIGFPE */
+volatile double SIGFPE_REQ = 0.0f; 
+#endif
+
 /*****************************************************************************/
 
 typedef struct
 /*****************************************************************************/
 
 typedef struct
@@ -234,6 +240,14 @@ ev_now (EV_P)
       cur = newcnt;                                    \
     }
 
       cur = newcnt;                                    \
     }
 
+#define array_slim(stem)                                       \
+  if (stem ## max < array_roundsize (stem ## cnt >> 2))                \
+    {                                                          \
+      stem ## max = array_roundsize (stem ## cnt >> 1);                \
+      base = realloc (base, sizeof (*base) * (stem ## max));   \
+      fprintf (stderr, "slimmed down " # stem " to %d\n", stem ## max);/*D*/\
+    }
+
 #define array_free(stem, idx) \
   free (stem ## s idx); stem ## cnt idx = stem ## max idx = 0;
 
 #define array_free(stem, idx) \
   free (stem ## s idx); stem ## cnt idx = stem ## max idx = 0;
 
@@ -458,6 +472,10 @@ signals_init (ANSIG *base, int count)
 static void
 sighandler (int signum)
 {
 static void
 sighandler (int signum)
 {
+#if WIN32
+  signal (signum, sighandler);
+#endif
+
   signals [signum - 1].gotsig = 1;
 
   if (!gotsig)
   signals [signum - 1].gotsig = 1;
 
   if (!gotsig)
@@ -1312,11 +1330,15 @@ ev_signal_start (EV_P_ struct ev_signal *w)
 
   if (!((WL)w)->next)
     {
 
   if (!((WL)w)->next)
     {
+#if WIN32
+      signal (w->signum, sighandler);
+#else
       struct sigaction sa;
       sa.sa_handler = sighandler;
       sigfillset (&sa.sa_mask);
       sa.sa_flags = SA_RESTART; /* if restarting works we save one iteration */
       sigaction (w->signum, &sa, 0);
       struct sigaction sa;
       sa.sa_handler = sighandler;
       sigfillset (&sa.sa_mask);
       sa.sa_flags = SA_RESTART; /* if restarting works we save one iteration */
       sigaction (w->signum, &sa, 0);
+#endif
     }
 }
 
     }
 }