mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-12 13:58:58 -04:00
Fix a few locking issues on windows.
This commit is contained in:
parent
5a112d3c07
commit
c51bb3c342
4
evdns.c
4
evdns.c
@ -3609,8 +3609,10 @@ evdns_base_config_windows_nameservers(struct evdns_base *base)
|
|||||||
if (base == NULL)
|
if (base == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
EVDNS_LOCK(base);
|
EVDNS_LOCK(base);
|
||||||
if (load_nameservers_with_getnetworkparams(base) == 0)
|
if (load_nameservers_with_getnetworkparams(base) == 0) {
|
||||||
|
EVDNS_UNLOCK(base);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
r = load_nameservers_from_registry(base);
|
r = load_nameservers_from_registry(base);
|
||||||
EVDNS_UNLOCK(base);
|
EVDNS_UNLOCK(base);
|
||||||
return r;
|
return r;
|
||||||
|
@ -170,6 +170,8 @@ debug_lock_alloc(unsigned locktype)
|
|||||||
mm_free(result);
|
mm_free(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
result->lock = NULL;
|
||||||
}
|
}
|
||||||
result->locktype = locktype;
|
result->locktype = locktype;
|
||||||
result->count = 0;
|
result->count = 0;
|
||||||
|
@ -66,13 +66,13 @@ dummy_cb(struct event_overlapped *o, uintptr_t key, ev_ssize_t n, int ok)
|
|||||||
struct dummy_overlapped *d_o =
|
struct dummy_overlapped *d_o =
|
||||||
EVUTIL_UPCAST(o, struct dummy_overlapped, eo);
|
EVUTIL_UPCAST(o, struct dummy_overlapped, eo);
|
||||||
|
|
||||||
EVLOCK_LOCK(d_o->lock, EVTHREAD_WRITE);
|
EVLOCK_LOCK(d_o->lock, 0);
|
||||||
if (d_o->call_count < MAX_CALLS) {
|
if (d_o->call_count < MAX_CALLS) {
|
||||||
d_o->keys[d_o->call_count] = key;
|
d_o->keys[d_o->call_count] = key;
|
||||||
d_o->sizes[d_o->call_count] = n;
|
d_o->sizes[d_o->call_count] = n;
|
||||||
}
|
}
|
||||||
d_o->call_count++;
|
d_o->call_count++;
|
||||||
EVLOCK_UNLOCK(d_o->lock, EVTHREAD_WRITE);
|
EVLOCK_UNLOCK(d_o->lock, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -80,14 +80,14 @@ pair_is_in(struct dummy_overlapped *o, uintptr_t key, ev_ssize_t n)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
EVLOCK_LOCK(o->lock, EVTHREAD_WRITE);
|
EVLOCK_LOCK(o->lock, 0);
|
||||||
for (i=0; i < o->call_count; ++i) {
|
for (i=0; i < o->call_count; ++i) {
|
||||||
if (o->keys[i] == key && o->sizes[i] == n) {
|
if (o->keys[i] == key && o->sizes[i] == n) {
|
||||||
result = 1;
|
result = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EVLOCK_UNLOCK(o->lock, EVTHREAD_WRITE);
|
EVLOCK_UNLOCK(o->lock, 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,9 +97,6 @@ test_iocp_port(void *ptr)
|
|||||||
struct event_iocp_port *port = NULL;
|
struct event_iocp_port *port = NULL;
|
||||||
struct dummy_overlapped o1, o2;
|
struct dummy_overlapped o1, o2;
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
evthread_use_windows_threads();
|
|
||||||
#endif
|
|
||||||
memset(&o1, 0, sizeof(o1));
|
memset(&o1, 0, sizeof(o1));
|
||||||
memset(&o2, 0, sizeof(o2));
|
memset(&o2, 0, sizeof(o2));
|
||||||
|
|
||||||
@ -186,10 +183,6 @@ test_iocp_evbuffer(void *ptr)
|
|||||||
event_overlapped_init(&rol, read_complete);
|
event_overlapped_init(&rol, read_complete);
|
||||||
event_overlapped_init(&wol, write_complete);
|
event_overlapped_init(&wol, write_complete);
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
evthread_use_windows_threads();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (i = 0; i < sizeof(junk); ++i)
|
for (i = 0; i < sizeof(junk); ++i)
|
||||||
junk[i] = (char)(i);
|
junk[i] = (char)(i);
|
||||||
|
|
||||||
@ -238,11 +231,6 @@ test_iocp_bufferevent_async(void *ptr)
|
|||||||
size_t n;
|
size_t n;
|
||||||
struct timeval one_sec = {1,0};
|
struct timeval one_sec = {1,0};
|
||||||
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
evthread_use_windows_threads();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
event_base_start_iocp(data->base);
|
event_base_start_iocp(data->base);
|
||||||
port = event_base_get_iocp(data->base);
|
port = event_base_get_iocp(data->base);
|
||||||
tt_assert(port);
|
tt_assert(port);
|
||||||
@ -274,10 +262,12 @@ end:
|
|||||||
|
|
||||||
|
|
||||||
struct testcase_t iocp_testcases[] = {
|
struct testcase_t iocp_testcases[] = {
|
||||||
{ "port", test_iocp_port, TT_FORK, NULL, NULL },
|
{ "port", test_iocp_port, TT_FORK|TT_NEED_THREADS, NULL, NULL },
|
||||||
{ "evbuffer", test_iocp_evbuffer, TT_FORK|TT_NEED_SOCKETPAIR,
|
{ "evbuffer", test_iocp_evbuffer,
|
||||||
|
TT_FORK|TT_NEED_SOCKETPAIR|TT_NEED_THREADS,
|
||||||
&basic_setup, NULL },
|
&basic_setup, NULL },
|
||||||
{ "bufferevent_async", test_iocp_bufferevent_async,
|
{ "bufferevent_async", test_iocp_bufferevent_async,
|
||||||
TT_FORK|TT_NEED_SOCKETPAIR|TT_NEED_BASE, &basic_setup, NULL },
|
TT_FORK|TT_NEED_SOCKETPAIR|TT_NEED_THREADS|TT_NEED_BASE,
|
||||||
|
&basic_setup, NULL },
|
||||||
END_OF_TESTCASES
|
END_OF_TESTCASES
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user