[Pommed-commits] r373 - trunk/pommed

jblache at alioth.debian.org jblache at alioth.debian.org
Fri Nov 16 16:18:06 UTC 2007


Author: jblache
Date: 2007-11-16 16:18:06 +0000 (Fri, 16 Nov 2007)
New Revision: 373

Modified:
   trunk/pommed/evdev.c
   trunk/pommed/evdev.h
   trunk/pommed/pommed.c
Log:
Move event loop processing into evdev.c.


Modified: trunk/pommed/evdev.c
===================================================================
--- trunk/pommed/evdev.c	2007-11-15 08:52:57 UTC (rev 372)
+++ trunk/pommed/evdev.c	2007-11-16 16:18:06 UTC (rev 373)
@@ -67,10 +67,15 @@
 
 #define EVDEV_NO_EVDEV      0
 
+/* evdev bitmask */
 static unsigned int evdevs;
 
 
-void
+static struct pollfd *fds;
+static int nfds;
+
+
+static void
 evdev_process_events(int fd)
 {
   int ret;
@@ -223,6 +228,48 @@
     }
 }
 
+
+int
+evdev_event_loop(int *reopen)
+{
+  int ret;
+  int i;
+
+  ret = poll(fds, nfds, LOOP_TIMEOUT);
+
+  if (ret < 0)
+    {
+      if (errno != EINTR)
+	{
+	  logmsg(LOG_ERR, "poll() error: %s", strerror(errno));
+
+	  return -2;
+	}
+      else
+	return -1;
+    }
+  else if (ret != 0)
+    {
+      for (i = 0; i < nfds; i++)
+	{
+	  /* the event devices cease to exist when suspending */
+	  if (fds[i].revents & (POLLERR | POLLHUP | POLLNVAL))
+	    {
+	      logmsg(LOG_WARNING, "Error condition signaled on evdev, reopening");
+	      *reopen = 1;
+
+	      return -1;
+	    }
+
+	  if (fds[i].revents & POLLIN)
+	    evdev_process_events(fds[i].fd);
+	}
+    }
+
+  return ret;
+}
+
+
 #ifdef __powerpc__
 /* PowerBook G4 Titanium */
 int
@@ -500,12 +547,11 @@
 
 
 int
-evdev_open(struct pollfd **fds)
+evdev_open(void)
 {
   int ret;
   int i, j;
 
-  int found = 0;
   int fd[32];
 
   unsigned short id[4];
@@ -583,15 +629,15 @@
 	  continue;
 	}
 
-      found++;
+      nfds++;
     }
 
-  logdebug("\nFound %d devices\n", found);
+  logdebug("\nFound %d devices\n", nfds);
 
-  /* Allocate found pollfd structs + 1 for the beeper */
-  *fds = (struct pollfd *) malloc((found + 1) * sizeof(struct pollfd));
+  /* Allocate nfds pollfd structs + 1 for the beeper */
+  fds = (struct pollfd *) malloc((nfds + 1) * sizeof(struct pollfd));
 
-  if (*fds == NULL)
+  if (fds == NULL)
     {
       for (i = 0; i < EVDEV_MAX; i++)
 	{
@@ -599,62 +645,62 @@
 	    close(fd[i]);
 	}
 
-      logmsg(LOG_ERR, "Out of memory for %d pollfd structs", found);
+      logmsg(LOG_ERR, "Out of memory for %d pollfd structs", nfds);
 
       return -1;
     }
 
   j = 0;
-  for (i = 0; i < EVDEV_MAX && j < found; i++)
+  for (i = 0; i < EVDEV_MAX && j < nfds; i++)
     {
       if (fd[i] < 0)
 	continue;
 
-      (*fds)[j].fd = fd[i];
-      (*fds)[j].events = POLLIN;
+      fds[j].fd = fd[i];
+      fds[j].events = POLLIN;
       j++;
     }
 
   ret = beep_open_device();
   if (ret == 0)
     {
-      (*fds)[j].fd = beep_info.fd;
-      (*fds)[j].events = POLLIN;
-      found++;
+      fds[j].fd = beep_info.fd;
+      fds[j].events = POLLIN;
+      nfds++;
     }
 
-  return found;
+  return nfds;
 }
 
 void
-evdev_close(struct pollfd **fds, int nfds)
+evdev_close(void)
 {
   int i;
 
-  if (*fds != NULL)
+  if (fds != NULL)
     {
       for (i = 0; i < nfds; i++)
 	{
-	  if ((*fds)[i].fd == beep_info.fd)
+	  if (fds[i].fd == beep_info.fd)
 	    beep_close_device();
 	  else
-	    close((*fds)[i].fd);
+	    close(fds[i].fd);
 	}
 
-      free(*fds);
+      free(fds);
     }
 
-  *fds = NULL;
+  fds = NULL;
 }
 
 
 int
-evdev_reopen(struct pollfd **fds, int nfds)
+evdev_reopen(void)
 {
   int i;
   unsigned int prev_evdevs = evdevs;
 
-  evdev_close(fds, nfds);
+  evdev_close();
 
   logdebug("Previous event devices: 0x%04x\n", prev_evdevs);
 
@@ -666,7 +712,7 @@
     {
       usleep(500000);
 
-      nfds = evdev_open(fds);
+      nfds = evdev_open();
 
       if (nfds > 0)
 	{
@@ -676,7 +722,7 @@
 	    break;
 
 	  /* We haven't got all the event devices we need */
-	  evdev_close(fds, nfds);
+	  evdev_close();
 	}
     }
 

Modified: trunk/pommed/evdev.h
===================================================================
--- trunk/pommed/evdev.h	2007-11-15 08:52:57 UTC (rev 372)
+++ trunk/pommed/evdev.h	2007-11-16 16:18:06 UTC (rev 373)
@@ -72,8 +72,8 @@
 #define EVDEV_MAX               32
 
 
-void
-evdev_process_events(int fd);
+int
+evdev_event_loop(int *reopen);
 
 
 #ifdef __powerpc__
@@ -100,12 +100,12 @@
 
 
 int
-evdev_open(struct pollfd **fds);
+evdev_open(void);
 
 void
-evdev_close(struct pollfd **fds, int nfds);
+evdev_close(void);
 
 int
-evdev_reopen(struct pollfd **fds, int nfds);
+evdev_reopen(void);
 
 #endif /* !__EVDEV_H__ */

Modified: trunk/pommed/pommed.c
===================================================================
--- trunk/pommed/pommed.c	2007-11-15 08:52:57 UTC (rev 372)
+++ trunk/pommed/pommed.c	2007-11-16 16:18:06 UTC (rev 373)
@@ -28,7 +28,6 @@
 #include <sys/time.h>
 #include <time.h>
 #include <string.h>
-#include <poll.h>
 #include <signal.h>
 
 #include <syslog.h>
@@ -639,13 +638,9 @@
 {
   int ret;
   int c;
-  int i;
 
   FILE *pidfile;
 
-  struct pollfd *fds;
-  int nfds;
-
   int reopen;
   machine_type machine;
 
@@ -744,8 +739,8 @@
       exit(1);
     }
 
-  nfds = evdev_open(&fds);
-  if (nfds < 1)
+  ret = evdev_open();
+  if (ret < 1)
     {
       logmsg(LOG_ERR, "No suitable event devices found");
 
@@ -778,7 +773,7 @@
 	{
 	  logmsg(LOG_ERR, "daemon() failed: %s", strerror(errno));
 
-	  evdev_close(&fds, nfds);
+	  evdev_close();
 
 	  exit(-1);
 	}
@@ -789,7 +784,7 @@
     {
       logmsg(LOG_WARNING, "Could not open pidfile %s: %s", PIDFILE, strerror(errno));
 
-      evdev_close(&fds, nfds);
+      evdev_close();
 
       exit(-1);
     }
@@ -812,9 +807,9 @@
       /* Attempt to reopen event devices, typically after resuming */
       if (reopen)
 	{
-	  nfds = evdev_reopen(&fds, nfds);
+	  ret = evdev_reopen();
 
-	  if (nfds < 1)
+	  if (ret < 1)
 	    {
 	      logmsg(LOG_ERR, "No suitable event devices found (reopen)");
 
@@ -830,35 +825,17 @@
 	  reopen = 0;
 	}
 
-      ret = poll(fds, nfds, LOOP_TIMEOUT);
+      ret = evdev_event_loop(&reopen);
 
       gettimeofday(&tv_now, NULL);
 
       if (ret < 0) /* error */
 	{
-	  if (errno != EINTR)
-	    {
-	      logmsg(LOG_ERR, "poll() error: %s", strerror(errno));
-
-	      break;
-	    }
+	  if (ret == -2)
+	    break;
 	}
       else if (ret != 0)
 	{
-	  for (i = 0; i < nfds; i++)
-	    {
-	      /* the event devices cease to exist when suspending */
-	      if (fds[i].revents & (POLLERR | POLLHUP | POLLNVAL))
-		{
-		  logmsg(LOG_WARNING, "Error condition signaled on evdev, reopening");
-		  reopen = 1;
-		  break;
-		}
-
-	      if (fds[i].revents & POLLIN)
-		evdev_process_events(fds[i].fd);
-	    }
-
 	  /* is it time to chek the ambient light sensors and AC state ? */
 	  tv_diff.tv_sec = tv_now.tv_sec - tv_als.tv_sec;
 	  if (tv_diff.tv_sec < 0)
@@ -903,7 +880,7 @@
       mbpdbus_process_requests();
     }
 
-  evdev_close(&fds, nfds);
+  evdev_close();
 
   beep_cleanup();
 




More information about the Pommed-commits mailing list