[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