mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Make tor build on win32 again; handle locking for server
svn:r1948
This commit is contained in:
@@ -11,6 +11,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>
|
||||
#endif
|
||||
@@ -47,8 +50,6 @@ tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout)
|
||||
}
|
||||
#else
|
||||
|
||||
#define FD_SETSIZE MAXCONNECTIONS
|
||||
|
||||
int
|
||||
tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout)
|
||||
{
|
||||
|
||||
@@ -1730,6 +1730,56 @@ int tor_lookup_hostname(const char *name, uint32_t *addr)
|
||||
}
|
||||
}
|
||||
|
||||
#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:
|
||||
mode:c
|
||||
|
||||
@@ -221,6 +221,14 @@ int parse_line_from_file(char *line, int maxlen, FILE *f, char **key_out, char *
|
||||
int spawn_func(int (*func)(void *), void *data);
|
||||
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]);
|
||||
|
||||
int is_internal_IP(uint32_t ip);
|
||||
|
||||
Reference in New Issue
Block a user