[or-cvs] Make tor build on win32 again; handle locking for server

Nick Mathewson nickm at seul.org
Sat Jun 5 01:50:38 UTC 2004


Update of /home/or/cvsroot/src/common
In directory moria.mit.edu:/tmp/cvs-serv12160/src/common

Modified Files:
	fakepoll.c util.c util.h 
Log Message:
Make tor build on win32 again; handle locking for server

Index: fakepoll.c
===================================================================
RCS file: /home/or/cvsroot/src/common/fakepoll.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- fakepoll.c	2 Jun 2004 19:44:23 -0000	1.30
+++ fakepoll.c	5 Jun 2004 01:50:35 -0000	1.31
@@ -10,6 +10,9 @@
 
 #include "orconfig.h"
 #include "fakepoll.h"
+
+#define MAXCONNECTIONS 10000 /* XXXX copied from or.h */
+#define FD_SETSIZE MAXCONNECTIONS
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -47,8 +50,6 @@
 }
 #else
 
-#define FD_SETSIZE MAXCONNECTIONS
-
 int
 tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout)
 {

Index: util.c
===================================================================
RCS file: /home/or/cvsroot/src/common/util.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -d -r1.104 -r1.105
--- util.c	1 Jun 2004 17:02:59 -0000	1.104
+++ util.c	5 Jun 2004 01:50:35 -0000	1.105
@@ -1729,6 +1729,56 @@
 #endif
   }
 }
+
+#ifndef MS_WINDOWS
+struct tor_mutex_t {
+};
+tor_mutex_t *tor_mutex_new(void) { return NULL; }
+void tor_mutex_acquire(tor_mutex_t *m) { }
+void tor_mutex_release(tor_mutex_t *m) { }
+void tor_mutex_free(tor_mutex_t *m) { }
+#else
+struct tor_mutex_t {
+  HANDLE handle;
+};
+tor_mutex_t *tor_mutex_new(void) 
+{
+  tor_mutex_t *m;
+  m = tor_malloc_zero(sizeof(tor_mutex_t));
+  m->handle = CreateMutex(NULL, FALSE, NULL);
+  tor_assert(m->handle != NULL);
+  return m;
+}
+void tor_mutex_free(tor_mutex_t *m)
+{
+  CloseHandle(m->handle);
+  tor_free(m);
+}
+void tor_mutex_acquire(tor_mutex_t *m)
+{
+  DWORD r;
+  r = WaitForSingleObject(m->handle, INFINITE);
+  switch (r) {
+    case WAIT_ABANDONED: /* holding thread exited. */
+	case WAIT_OBJECT_0: /* we got the mutex normally. */
+      break;
+    case WAIT_TIMEOUT: /* Should never happen. */
+	  tor_assert(0);
+      break;
+	case WAIT_FAILED:
+      log_fn(LOG_WARN, "Failed to acquire mutex: %d", GetLastError());
+  }
+}
+void tor_mutex_release(tor_mutex_t *m)
+{
+  BOOL r;
+  r = ReleaseMutex(m->handle);
+  if (!r) {
+    log_fn(LOG_WARN, "Failed to release mutex: %d", GetLastError());      
+  }
+}
+
+#endif
 
 /*
   Local Variables:

Index: util.h
===================================================================
RCS file: /home/or/cvsroot/src/common/util.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- util.h	18 May 2004 15:35:21 -0000	1.69
+++ util.h	5 Jun 2004 01:50:35 -0000	1.70
@@ -219,7 +219,15 @@
 int parse_line_from_file(char *line, int maxlen, FILE *f, char **key_out, char **value_out);
 
 int spawn_func(int (*func)(void *), void *data);
-void spawn_exit();
+void spawn_exit();
+
+/* Because we use threads instead of processes on Windows, we need locking on Windows.
+ * On Unixy platforms, these functions are no-ops. */
+typedef struct tor_mutex_t tor_mutex_t;
+tor_mutex_t *tor_mutex_new(void);
+void tor_mutex_acquire(tor_mutex_t *m);
+void tor_mutex_release(tor_mutex_t *m);
+void tor_mutex_free(tor_mutex_t *m);
 
 int tor_socketpair(int family, int type, int protocol, int fd[2]);
 
@@ -259,7 +267,7 @@
 #define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS)
 #define tor_socket_errno(sock)       (errno)
 #define tor_socket_strerror(e)       strerror(e)
-#endif
+#endif
 
 #endif
 



More information about the tor-commits mailing list