diff options
-rw-r--r-- | CONTRIBUTING.md | 53 | ||||
-rw-r--r-- | Makefile | 15 | ||||
-rw-r--r-- | build.json | 3 | ||||
-rw-r--r-- | include/grpc/support/host_port.h | 5 | ||||
-rw-r--r-- | src/core/iomgr/resolve_address_posix.c (renamed from src/core/iomgr/resolve_address.c) | 67 | ||||
-rw-r--r-- | src/core/iomgr/resolve_address_windows.c | 166 | ||||
-rw-r--r-- | src/core/iomgr/tcp_client_windows.c | 5 | ||||
-rw-r--r-- | src/core/iomgr/tcp_server_windows.c | 5 | ||||
-rw-r--r-- | src/core/support/cpu_windows.c | 2 | ||||
-rw-r--r-- | src/core/support/host_port.c | 58 | ||||
-rw-r--r-- | src/core/surface/init.c | 2 | ||||
-rw-r--r-- | src/core/surface/server.c | 2 | ||||
-rw-r--r-- | src/core/transport/chttp2_transport.c | 4 | ||||
-rw-r--r-- | vsprojects/vs2013/grpc.vcxproj | 4 | ||||
-rw-r--r-- | vsprojects/vs2013/grpc.vcxproj.filters | 5 | ||||
-rw-r--r-- | vsprojects/vs2013/grpc_shared.vcxproj | 4 | ||||
-rw-r--r-- | vsprojects/vs2013/grpc_shared.vcxproj.filters | 5 | ||||
-rw-r--r-- | vsprojects/vs2013/grpc_unsecure.vcxproj | 4 | ||||
-rw-r--r-- | vsprojects/vs2013/grpc_unsecure.vcxproj.filters | 5 |
19 files changed, 333 insertions, 81 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..57d176f663 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,53 @@ +# How to contribute + +We definitely welcome patches and contribution to grpc! Here is some guideline +and information about how to do so. + +## Getting started + +### Legal requirements + +In order to protect both you and ourselves, you will need to sign the +[Contributor License Agreement](https://cla.developers.google.com/clas). + +### Technical requirements + +You will need several tools to work with this repository. In addition to all of +the packages described in the [INSTALL](INSTALL) file, you will also need +python, and the mako template renderer. To install the latter, using pip, one +should simply be able to do `pip install mako`. + +In order to run all of the tests we provide, you will need valgrind and clang. +More specifically, under debian, you will need the package libc++-dev to +properly run all the tests. + +If you are planning to work on any of the languages other than C and C++, you +will also need their appropriate development environments. + +If you want to work under Windows, we recommend you to use Visual Studio 2013. +The [Community or Express editions](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx) +are free and suitable for developing with grpc. Note however that our test +environment and tools are available for Unix environments only at the moment. + +## Testing your changes + +We provide a tool to help you run our suite of tests in various environments. +In order to run most of the available tests, one would need to run: + +`./tools/run_tests/run_tests.py` + +If you want to run all the possible tests for all possible languages, do this: + +`./tools/run_tests/run_tests.py -lall -call` + +## Adding or removing source code + +Each language uses its own build system to work. Currently, the root's Makefile +and the Visual Studio project files are building the C and C++ source code only +at the moment. In order to ease the maintenance of these files, we have a +template system. Please do not contribute manual changes to any of the generated +files. Instead, modify the template files, or the build.json file, and +re-generate the project files using the following command: + +`./tools/buildgen/generate_projects.sh` + @@ -2324,7 +2324,8 @@ LIBGRPC_SRC = \ src/core/iomgr/pollset_multipoller_with_poll_posix.c \ src/core/iomgr/pollset_posix.c \ src/core/iomgr/pollset_windows.c \ - src/core/iomgr/resolve_address.c \ + src/core/iomgr/resolve_address_posix.c \ + src/core/iomgr/resolve_address_windows.c \ src/core/iomgr/sockaddr_utils.c \ src/core/iomgr/socket_utils_common_posix.c \ src/core/iomgr/socket_utils_linux.c \ @@ -2464,7 +2465,8 @@ src/core/iomgr/pollset_multipoller_with_epoll.c: $(OPENSSL_DEP) src/core/iomgr/pollset_multipoller_with_poll_posix.c: $(OPENSSL_DEP) src/core/iomgr/pollset_posix.c: $(OPENSSL_DEP) src/core/iomgr/pollset_windows.c: $(OPENSSL_DEP) -src/core/iomgr/resolve_address.c: $(OPENSSL_DEP) +src/core/iomgr/resolve_address_posix.c: $(OPENSSL_DEP) +src/core/iomgr/resolve_address_windows.c: $(OPENSSL_DEP) src/core/iomgr/sockaddr_utils.c: $(OPENSSL_DEP) src/core/iomgr/socket_utils_common_posix.c: $(OPENSSL_DEP) src/core/iomgr/socket_utils_linux.c: $(OPENSSL_DEP) @@ -2621,7 +2623,8 @@ $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_multipoller_with_epoll.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_multipoller_with_poll_posix.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_posix.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_windows.o: -$(OBJDIR)/$(CONFIG)/src/core/iomgr/resolve_address.o: +$(OBJDIR)/$(CONFIG)/src/core/iomgr/resolve_address_posix.o: +$(OBJDIR)/$(CONFIG)/src/core/iomgr/resolve_address_windows.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/sockaddr_utils.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/socket_utils_common_posix.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/socket_utils_linux.o: @@ -2793,7 +2796,8 @@ LIBGRPC_UNSECURE_SRC = \ src/core/iomgr/pollset_multipoller_with_poll_posix.c \ src/core/iomgr/pollset_posix.c \ src/core/iomgr/pollset_windows.c \ - src/core/iomgr/resolve_address.c \ + src/core/iomgr/resolve_address_posix.c \ + src/core/iomgr/resolve_address_windows.c \ src/core/iomgr/sockaddr_utils.c \ src/core/iomgr/socket_utils_common_posix.c \ src/core/iomgr/socket_utils_linux.c \ @@ -2928,7 +2932,8 @@ $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_multipoller_with_epoll.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_multipoller_with_poll_posix.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_posix.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/pollset_windows.o: -$(OBJDIR)/$(CONFIG)/src/core/iomgr/resolve_address.o: +$(OBJDIR)/$(CONFIG)/src/core/iomgr/resolve_address_posix.o: +$(OBJDIR)/$(CONFIG)/src/core/iomgr/resolve_address_windows.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/sockaddr_utils.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/socket_utils_common_posix.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/socket_utils_linux.o: diff --git a/build.json b/build.json index f1f11650c1..f6ef33b25f 100644 --- a/build.json +++ b/build.json @@ -136,7 +136,8 @@ "src/core/iomgr/pollset_multipoller_with_poll_posix.c", "src/core/iomgr/pollset_posix.c", "src/core/iomgr/pollset_windows.c", - "src/core/iomgr/resolve_address.c", + "src/core/iomgr/resolve_address_posix.c", + "src/core/iomgr/resolve_address_windows.c", "src/core/iomgr/sockaddr_utils.c", "src/core/iomgr/socket_utils_common_posix.c", "src/core/iomgr/socket_utils_linux.c", diff --git a/include/grpc/support/host_port.h b/include/grpc/support/host_port.h index 362046cb95..2dac38a157 100644 --- a/include/grpc/support/host_port.h +++ b/include/grpc/support/host_port.h @@ -50,6 +50,11 @@ extern "C" { In the unlikely event of an error, returns -1 and sets *out to NULL. */ int gpr_join_host_port(char **out, const char *host, int port); +/* Given a name in the form "host:port" or "[ho:st]:port", split into hostname + and port number, into newly allocated strings, which must later be + destroyed using gpr_free(). */ +void gpr_split_host_port(const char *name, char **host, char **port); + #ifdef __cplusplus } #endif diff --git a/src/core/iomgr/resolve_address.c b/src/core/iomgr/resolve_address_posix.c index ce9b157e31..edf40b5ad1 100644 --- a/src/core/iomgr/resolve_address.c +++ b/src/core/iomgr/resolve_address_posix.c @@ -31,9 +31,8 @@ * */ -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#endif +#include <grpc/support/port_platform.h> +#ifdef GPR_POSIX_SOCKET #include "src/core/iomgr/sockaddr.h" #include "src/core/iomgr/resolve_address.h" @@ -46,6 +45,7 @@ #include "src/core/iomgr/sockaddr_utils.h" #include "src/core/support/string.h" #include <grpc/support/alloc.h> +#include <grpc/support/host_port.h> #include <grpc/support/log.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> @@ -57,63 +57,6 @@ typedef struct { void *arg; } request; -static void split_host_port(const char *name, char **host, char **port) { - const char *host_start; - size_t host_len; - const char *port_start; - - *host = NULL; - *port = NULL; - - if (name[0] == '[') { - /* Parse a bracketed host, typically an IPv6 literal. */ - const char *rbracket = strchr(name, ']'); - if (rbracket == NULL) { - /* Unmatched [ */ - return; - } - if (rbracket[1] == '\0') { - /* ]<end> */ - port_start = NULL; - } else if (rbracket[1] == ':') { - /* ]:<port?> */ - port_start = rbracket + 2; - } else { - /* ]<invalid> */ - return; - } - host_start = name + 1; - host_len = rbracket - host_start; - if (memchr(host_start, ':', host_len) == NULL) { - /* Require all bracketed hosts to contain a colon, because a hostname or - IPv4 address should never use brackets. */ - return; - } - } else { - const char *colon = strchr(name, ':'); - if (colon != NULL && strchr(colon + 1, ':') == NULL) { - /* Exactly 1 colon. Split into host:port. */ - host_start = name; - host_len = colon - name; - port_start = colon + 1; - } else { - /* 0 or 2+ colons. Bare hostname or IPv6 litearal. */ - host_start = name; - host_len = strlen(name); - port_start = NULL; - } - } - - /* Allocate return values. */ - *host = gpr_malloc(host_len + 1); - memcpy(*host, host_start, host_len); - (*host)[host_len] = '\0'; - - if (port_start != NULL) { - *port = gpr_strdup(port_start); - } -} - grpc_resolved_addresses *grpc_blocking_resolve_address( const char *name, const char *default_port) { struct addrinfo hints; @@ -139,7 +82,7 @@ grpc_resolved_addresses *grpc_blocking_resolve_address( } /* parse name, splitting it into host and port parts */ - split_host_port(name, &host, &port); + gpr_split_host_port(name, &host, &port); if (host == NULL) { gpr_log(GPR_ERROR, "unparseable host:port: '%s'", name); goto done; @@ -233,3 +176,5 @@ void grpc_resolve_address(const char *name, const char *default_port, r->arg = arg; gpr_thd_new(&id, do_request, r, NULL); } + +#endif diff --git a/src/core/iomgr/resolve_address_windows.c b/src/core/iomgr/resolve_address_windows.c new file mode 100644 index 0000000000..877b3f35ed --- /dev/null +++ b/src/core/iomgr/resolve_address_windows.c @@ -0,0 +1,166 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include <grpc/support/port_platform.h> +#ifdef GPR_WINSOCK_SOCKET + +#include "src/core/iomgr/sockaddr.h" +#include "src/core/iomgr/resolve_address.h" + +#include <sys/types.h> +#include <string.h> + +#include "src/core/iomgr/iomgr_internal.h" +#include "src/core/iomgr/sockaddr_utils.h" +#include "src/core/support/string.h" +#include <grpc/support/alloc.h> +#include <grpc/support/host_port.h> +#include <grpc/support/log.h> +#include <grpc/support/thd.h> +#include <grpc/support/time.h> + +typedef struct { + char *name; + char *default_port; + grpc_resolve_cb cb; + void *arg; +} request; + +grpc_resolved_addresses *grpc_blocking_resolve_address( + const char *name, const char *default_port) { + struct addrinfo hints; + struct addrinfo *result = NULL, *resp; + char *host; + char *port; + int s; + size_t i; + grpc_resolved_addresses *addrs = NULL; + const gpr_timespec start_time = gpr_now(); + + /* parse name, splitting it into host and port parts */ + gpr_split_host_port(name, &host, &port); + if (host == NULL) { + gpr_log(GPR_ERROR, "unparseable host:port: '%s'", name); + goto done; + } + if (port == NULL) { + if (default_port == NULL) { + gpr_log(GPR_ERROR, "no port in name '%s'", name); + goto done; + } + port = gpr_strdup(default_port); + } + + /* Call getaddrinfo */ + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */ + hints.ai_socktype = SOCK_STREAM; /* stream socket */ + hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */ + + s = getaddrinfo(host, port, &hints, &result); + if (s != 0) { + gpr_log(GPR_ERROR, "getaddrinfo: %s", gai_strerror(s)); + goto done; + } + + /* Success path: set addrs non-NULL, fill it in */ + addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); + addrs->naddrs = 0; + for (resp = result; resp != NULL; resp = resp->ai_next) { + addrs->naddrs++; + } + addrs->addrs = gpr_malloc(sizeof(grpc_resolved_address) * addrs->naddrs); + i = 0; + for (resp = result; resp != NULL; resp = resp->ai_next) { + memcpy(&addrs->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); + addrs->addrs[i].len = resp->ai_addrlen; + i++; + } + + /* Temporary logging, to help identify flakiness in dualstack_socket_test. */ + { + const gpr_timespec delay = gpr_time_sub(gpr_now(), start_time); + const int delay_ms = + delay.tv_sec * GPR_MS_PER_SEC + delay.tv_nsec / GPR_NS_PER_MS; + gpr_log(GPR_INFO, "logspam: getaddrinfo(%s, %s) resolved %d addrs in %dms:", + host, port, addrs->naddrs, delay_ms); + for (i = 0; i < addrs->naddrs; i++) { + char *buf; + grpc_sockaddr_to_string(&buf, (struct sockaddr *)&addrs->addrs[i].addr, + 0); + gpr_log(GPR_INFO, "logspam: [%d] %s", i, buf); + gpr_free(buf); + } + } + +done: + gpr_free(host); + gpr_free(port); + if (result) { + freeaddrinfo(result); + } + return addrs; +} + +/* Thread function to asynch-ify grpc_blocking_resolve_address */ +static void do_request(void *rp) { + request *r = rp; + grpc_resolved_addresses *resolved = + grpc_blocking_resolve_address(r->name, r->default_port); + void *arg = r->arg; + grpc_resolve_cb cb = r->cb; + gpr_free(r->name); + gpr_free(r->default_port); + gpr_free(r); + cb(arg, resolved); + grpc_iomgr_unref(); +} + +void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { + gpr_free(addrs->addrs); + gpr_free(addrs); +} + +void grpc_resolve_address(const char *name, const char *default_port, + grpc_resolve_cb cb, void *arg) { + request *r = gpr_malloc(sizeof(request)); + gpr_thd_id id; + grpc_iomgr_ref(); + r->name = gpr_strdup(name); + r->default_port = gpr_strdup(default_port); + r->cb = cb; + r->arg = arg; + gpr_thd_new(&id, do_request, r, NULL); +} + +#endif diff --git a/src/core/iomgr/tcp_client_windows.c b/src/core/iomgr/tcp_client_windows.c index 2bd93c6af2..181d89cb6d 100644 --- a/src/core/iomgr/tcp_client_windows.c +++ b/src/core/iomgr/tcp_client_windows.c @@ -43,12 +43,13 @@ #include <grpc/support/slice_buffer.h> #include <grpc/support/useful.h> +#include "src/core/iomgr/alarm.h" +#include "src/core/iomgr/iocp_windows.h" #include "src/core/iomgr/tcp_client.h" #include "src/core/iomgr/tcp_windows.h" -#include "src/core/iomgr/socket_windows.h" -#include "src/core/iomgr/alarm.h" #include "src/core/iomgr/sockaddr.h" #include "src/core/iomgr/sockaddr_utils.h" +#include "src/core/iomgr/socket_windows.h" typedef struct { void(*cb)(void *arg, grpc_endpoint *tcp); diff --git a/src/core/iomgr/tcp_server_windows.c b/src/core/iomgr/tcp_server_windows.c index c6864efdc5..59319da26d 100644 --- a/src/core/iomgr/tcp_server_windows.c +++ b/src/core/iomgr/tcp_server_windows.c @@ -355,8 +355,9 @@ SOCKET grpc_tcp_server_get_socket(grpc_tcp_server *s, unsigned index) { return (index < s->nports) ? s->ports[index].socket->socket : INVALID_SOCKET; } -void grpc_tcp_server_start(grpc_tcp_server *s, grpc_pollset *pollset, - grpc_tcp_server_cb cb, void *cb_arg) { +void grpc_tcp_server_start(grpc_tcp_server *s, grpc_pollset **pollset, + size_t pollset_count, grpc_tcp_server_cb cb, + void *cb_arg) { size_t i; GPR_ASSERT(cb); gpr_mu_lock(&s->mu); diff --git a/src/core/support/cpu_windows.c b/src/core/support/cpu_windows.c index 9a460cc484..cb454ccd3b 100644 --- a/src/core/support/cpu_windows.c +++ b/src/core/support/cpu_windows.c @@ -35,8 +35,6 @@ #ifdef GPR_WIN32 -#include "src/core/support/cpu.h" - #include <grpc/support/log.h> unsigned gpr_cpu_num_cores(void) { diff --git a/src/core/support/host_port.c b/src/core/support/host_port.c index 379d30b045..fa49f1a33a 100644 --- a/src/core/support/host_port.c +++ b/src/core/support/host_port.c @@ -36,6 +36,7 @@ #include <string.h> #include "src/core/support/string.h" +#include <grpc/support/alloc.h> #include <grpc/support/log.h> int gpr_join_host_port(char **out, const char *host, int port) { @@ -47,3 +48,60 @@ int gpr_join_host_port(char **out, const char *host, int port) { return gpr_asprintf(out, "%s:%d", host, port); } } + +void gpr_split_host_port(const char *name, char **host, char **port) { + const char *host_start; + size_t host_len; + const char *port_start; + + *host = NULL; + *port = NULL; + + if (name[0] == '[') { + /* Parse a bracketed host, typically an IPv6 literal. */ + const char *rbracket = strchr(name, ']'); + if (rbracket == NULL) { + /* Unmatched [ */ + return; + } + if (rbracket[1] == '\0') { + /* ]<end> */ + port_start = NULL; + } else if (rbracket[1] == ':') { + /* ]:<port?> */ + port_start = rbracket + 2; + } else { + /* ]<invalid> */ + return; + } + host_start = name + 1; + host_len = rbracket - host_start; + if (memchr(host_start, ':', host_len) == NULL) { + /* Require all bracketed hosts to contain a colon, because a hostname or + IPv4 address should never use brackets. */ + return; + } + } else { + const char *colon = strchr(name, ':'); + if (colon != NULL && strchr(colon + 1, ':') == NULL) { + /* Exactly 1 colon. Split into host:port. */ + host_start = name; + host_len = colon - name; + port_start = colon + 1; + } else { + /* 0 or 2+ colons. Bare hostname or IPv6 litearal. */ + host_start = name; + host_len = strlen(name); + port_start = NULL; + } + } + + /* Allocate return values. */ + *host = gpr_malloc(host_len + 1); + memcpy(*host, host_start, host_len); + (*host)[host_len] = '\0'; + + if (port_start != NULL) { + *port = gpr_strdup(port_start); + } +} diff --git a/src/core/surface/init.c b/src/core/surface/init.c index fa4614abc8..2d8f36e9c2 100644 --- a/src/core/surface/init.c +++ b/src/core/surface/init.c @@ -40,7 +40,7 @@ static gpr_once g_init = GPR_ONCE_INIT; static gpr_mu g_init_mu; static int g_initializations; -static void do_init() { +static void do_init(void) { gpr_mu_init(&g_init_mu); g_initializations = 0; } diff --git a/src/core/surface/server.c b/src/core/surface/server.c index a95215c5de..c99a1b4cc9 100644 --- a/src/core/surface/server.c +++ b/src/core/surface/server.c @@ -291,7 +291,7 @@ static void orphan_channel(channel_data *chand) { static void finish_destroy_channel(void *cd, int success) { channel_data *chand = cd; grpc_server *server = chand->server; - grpc_channel_destroy(chand->channel); + grpc_channel_internal_unref(chand->channel); server_unref(server); } diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c index 982417ec8a..ccd8d0c376 100644 --- a/src/core/transport/chttp2_transport.c +++ b/src/core/transport/chttp2_transport.c @@ -191,6 +191,7 @@ struct transport { gpr_uint8 writing; gpr_uint8 calling_back; gpr_uint8 destroying; + gpr_uint8 closed; error_state error_state; /* stream indexing */ @@ -416,6 +417,7 @@ static void init_transport(transport *t, grpc_transport_setup_callback setup, t->next_stream_id = is_client ? 1 : 2; t->last_incoming_stream_id = 0; t->destroying = 0; + t->closed = 0; t->is_client = is_client; t->outgoing_window = DEFAULT_WINDOW; t->incoming_window = DEFAULT_WINDOW; @@ -521,6 +523,8 @@ static void destroy_transport(grpc_transport *gt) { static void close_transport(grpc_transport *gt) { transport *t = (transport *)gt; gpr_mu_lock(&t->mu); + GPR_ASSERT(!t->closed); + t->closed = 1; if (t->ep) { grpc_endpoint_shutdown(t->ep); } diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj index b55c7f926b..89c0de333c 100644 --- a/vsprojects/vs2013/grpc.vcxproj +++ b/vsprojects/vs2013/grpc.vcxproj @@ -283,7 +283,9 @@ </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_windows.c"> </ClCompile> - <ClCompile Include="..\..\src\core\iomgr\resolve_address.c"> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_posix.c"> + </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_windows.c"> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\sockaddr_utils.c"> </ClCompile> diff --git a/vsprojects/vs2013/grpc.vcxproj.filters b/vsprojects/vs2013/grpc.vcxproj.filters index 9505c37ef4..a2d9f30eda 100644 --- a/vsprojects/vs2013/grpc.vcxproj.filters +++ b/vsprojects/vs2013/grpc.vcxproj.filters @@ -145,7 +145,10 @@ <ClCompile Include="..\..\src\core\iomgr\pollset_windows.c"> <Filter>src\core\iomgr</Filter> </ClCompile> - <ClCompile Include="..\..\src\core\iomgr\resolve_address.c"> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_posix.c"> + <Filter>src\core\iomgr</Filter> + </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_windows.c"> <Filter>src\core\iomgr</Filter> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\sockaddr_utils.c"> diff --git a/vsprojects/vs2013/grpc_shared.vcxproj b/vsprojects/vs2013/grpc_shared.vcxproj index dfb0899138..81a280d912 100644 --- a/vsprojects/vs2013/grpc_shared.vcxproj +++ b/vsprojects/vs2013/grpc_shared.vcxproj @@ -287,7 +287,9 @@ </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_windows.c"> </ClCompile> - <ClCompile Include="..\..\src\core\iomgr\resolve_address.c"> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_posix.c"> + </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_windows.c"> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\sockaddr_utils.c"> </ClCompile> diff --git a/vsprojects/vs2013/grpc_shared.vcxproj.filters b/vsprojects/vs2013/grpc_shared.vcxproj.filters index 9505c37ef4..a2d9f30eda 100644 --- a/vsprojects/vs2013/grpc_shared.vcxproj.filters +++ b/vsprojects/vs2013/grpc_shared.vcxproj.filters @@ -145,7 +145,10 @@ <ClCompile Include="..\..\src\core\iomgr\pollset_windows.c"> <Filter>src\core\iomgr</Filter> </ClCompile> - <ClCompile Include="..\..\src\core\iomgr\resolve_address.c"> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_posix.c"> + <Filter>src\core\iomgr</Filter> + </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_windows.c"> <Filter>src\core\iomgr</Filter> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\sockaddr_utils.c"> diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj b/vsprojects/vs2013/grpc_unsecure.vcxproj index 74fc6c96ec..0c81ec4768 100644 --- a/vsprojects/vs2013/grpc_unsecure.vcxproj +++ b/vsprojects/vs2013/grpc_unsecure.vcxproj @@ -232,7 +232,9 @@ </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_windows.c"> </ClCompile> - <ClCompile Include="..\..\src\core\iomgr\resolve_address.c"> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_posix.c"> + </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_windows.c"> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\sockaddr_utils.c"> </ClCompile> diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters index ea34d210bf..4b5370a573 100644 --- a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters @@ -91,7 +91,10 @@ <ClCompile Include="..\..\src\core\iomgr\pollset_windows.c"> <Filter>src\core\iomgr</Filter> </ClCompile> - <ClCompile Include="..\..\src\core\iomgr\resolve_address.c"> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_posix.c"> + <Filter>src\core\iomgr</Filter> + </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\resolve_address_windows.c"> <Filter>src\core\iomgr</Filter> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\sockaddr_utils.c"> |