to get to know whether you where woken up from sleep, 
or the sleep endet naturaly, the following patch is needed:

(i need this, to determine, whether i was woken up from a thread
doing tcdrain, or if the tcdrain system call gets stuck. the
systemcall doesn't provide the ability of a timeout.)

no funtionality change, just documentation and actually 
do return ret.

to header:

gwlib/gwthread.h      2005-04-13 18:13:38.000000000 +0200
+++ gwthread.h  2005-04-13 19:47:39.000000000 +0200
@@ -139,8 +139,12 @@ int gwthread_pollfd(int fd, int events, 
 int gwthread_poll(struct pollfd *fds, long numfds, double timeout);
 
 /* Sleep until "seconds" seconds have elapsed, or until another thread
- * calls gwthread_wakeup on us.  Fractional seconds are allowed. */
-void gwthread_sleep(double seconds);
+ * calls gwthread_wakeup on us.  Fractional seconds are allowed. 
+ * as we need the return of poll, get it here. 
+ * returns 0 on Timeout, positive value if the thread was 
+ * awakened by another thread. -1 on error.
+ */
+int gwthread_sleep(double seconds);
 
 /*
  * Check wheather this thread should handle the given signal.



to code:

gwlib/gwthread-pthread.c      2005-04-13 18:13:38.000000000 +0200
+++ gwthread-pthread.c  2005-04-13 19:50:13.000000000 +0200
@@ -730,7 +730,7 @@ int gwthread_poll(struct pollfd *fds, lo
 }
 
 
-void gwthread_sleep(double seconds)
+int gwthread_sleep(double seconds)
 {
     struct pollfd pollfd;
     struct threadinfo *threadinfo;
@@ -755,6 +755,7 @@ void gwthread_sleep(double seconds)
     if (ret == 1) {
         flushpipe(pollfd.fd);
     }
+       return ret;
 }
 

Reply via email to