|
|
|
@ -33,16 +33,17 @@ |
|
|
|
|
|
|
|
|
|
#include "src/core/iomgr/pollset_kick.h" |
|
|
|
|
|
|
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
|
#include <grpc/support/log.h> |
|
|
|
|
#include "test/core/util/test_config.h" |
|
|
|
|
|
|
|
|
|
static void test_allocation() { |
|
|
|
|
static void test_allocation(void) { |
|
|
|
|
grpc_pollset_kick_state state; |
|
|
|
|
grpc_pollset_kick_init(&state); |
|
|
|
|
grpc_pollset_kick_destroy(&state); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_non_kick() { |
|
|
|
|
static void test_non_kick(void) { |
|
|
|
|
grpc_pollset_kick_state state; |
|
|
|
|
int fd; |
|
|
|
|
|
|
|
|
@ -54,7 +55,7 @@ static void test_non_kick() { |
|
|
|
|
grpc_pollset_kick_destroy(&state); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_basic_kick() { |
|
|
|
|
static void test_basic_kick(void) { |
|
|
|
|
/* Kicked during poll */ |
|
|
|
|
grpc_pollset_kick_state state; |
|
|
|
|
int fd; |
|
|
|
@ -73,7 +74,7 @@ static void test_basic_kick() { |
|
|
|
|
grpc_pollset_kick_destroy(&state); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_non_poll_kick() { |
|
|
|
|
static void test_non_poll_kick(void) { |
|
|
|
|
/* Kick before entering poll */ |
|
|
|
|
grpc_pollset_kick_state state; |
|
|
|
|
int fd; |
|
|
|
@ -86,6 +87,26 @@ static void test_non_poll_kick() { |
|
|
|
|
grpc_pollset_kick_destroy(&state); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define GRPC_MAX_CACHED_PIPES 50 |
|
|
|
|
|
|
|
|
|
static void test_over_free(void) { |
|
|
|
|
/* Check high watermark pipe free logic */ |
|
|
|
|
int i; |
|
|
|
|
struct grpc_pollset_kick_state *kick_state = |
|
|
|
|
gpr_malloc(sizeof(grpc_pollset_kick_state) * GRPC_MAX_CACHED_PIPES); |
|
|
|
|
for (i = 0; i < GRPC_MAX_CACHED_PIPES; ++i) { |
|
|
|
|
int fd; |
|
|
|
|
grpc_pollset_kick_init(&kick_state[i]); |
|
|
|
|
fd = grpc_pollset_kick_pre_poll(&kick_state[i]); |
|
|
|
|
GPR_ASSERT(fd >= 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (i = 0; i < GRPC_MAX_CACHED_PIPES; ++i) { |
|
|
|
|
grpc_pollset_kick_post_poll(&kick_state[i]); |
|
|
|
|
grpc_pollset_kick_destroy(&kick_state[i]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(int argc, char **argv) { |
|
|
|
|
grpc_test_init(argc, argv); |
|
|
|
|
|
|
|
|
@ -95,6 +116,7 @@ int main(int argc, char **argv) { |
|
|
|
|
test_basic_kick(); |
|
|
|
|
test_non_poll_kick(); |
|
|
|
|
test_non_kick(); |
|
|
|
|
test_over_free(); |
|
|
|
|
|
|
|
|
|
grpc_pollset_kick_global_destroy(); |
|
|
|
|
return 0; |
|
|
|
|