Use poll() instead of select() for the server main loop.
Fixed races with SIGCHLD handling and ptrace.
Minor fixes to timeout handling.
diff --git a/server/object.h b/server/object.h
index 46c9c6c..d5335f1 100644
--- a/server/object.h
+++ b/server/object.h
@@ -11,6 +11,7 @@
#error This file can only be used in the Wine server
#endif
+#include <sys/poll.h>
#include <sys/time.h>
#include "server.h"
@@ -89,21 +90,11 @@
/* select functions */
-#define READ_EVENT 1
-#define WRITE_EVENT 2
-#define EXCEPT_EVENT 4
-
-struct select_user
-{
- int fd; /* user fd */
- void (*func)(int event, void *private); /* callback function */
- void *private; /* callback private data */
-};
-
-extern void register_select_user( struct select_user *user );
-extern void unregister_select_user( struct select_user *user );
-extern void set_select_events( struct select_user *user, int events );
-extern int check_select_events( struct select_user *user, int events );
+extern int add_select_user( int fd, void (*func)(int, void *), void *private );
+extern void remove_select_user( int user );
+extern void change_select_fd( int user, int fd );
+extern void set_select_events( int user, int events );
+extern int check_select_events( int fd, int events );
extern void select_loop(void);
/* timeout functions */
@@ -115,7 +106,13 @@
extern struct timeout_user *add_timeout_user( struct timeval *when,
timeout_callback func, void *private );
extern void remove_timeout_user( struct timeout_user *user );
-extern void make_timeout( struct timeval *when, int timeout );
+extern void add_timeout( struct timeval *when, int timeout );
+/* return 1 if t1 is before t2 */
+static inline int time_before( struct timeval *t1, struct timeval *t2 )
+{
+ return ((t1->tv_sec < t2->tv_sec) ||
+ ((t1->tv_sec == t2->tv_sec) && (t1->tv_usec < t2->tv_usec)));
+}
/* socket functions */