commit
a0a8eaab0e
166 changed files with 2059 additions and 986 deletions
@ -0,0 +1,114 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2016, 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/census.h> |
||||||
|
|
||||||
|
#include <grpc/support/log.h> |
||||||
|
|
||||||
|
/* Placeholders for the pending APIs */ |
||||||
|
|
||||||
|
census_tag_set *census_context_tag_set(census_context *context) { |
||||||
|
(void)context; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
int census_get_trace_record(census_trace_record *trace_record) { |
||||||
|
(void)trace_record; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
void census_record_values(census_context *context, census_value *values, |
||||||
|
size_t nvalues) { |
||||||
|
(void)context; |
||||||
|
(void)values; |
||||||
|
(void)nvalues; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
void census_set_rpc_client_peer(census_context *context, const char *peer) { |
||||||
|
(void)context; |
||||||
|
(void)peer; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
void census_trace_scan_end() { abort(); } |
||||||
|
|
||||||
|
int census_trace_scan_start(int consume) { |
||||||
|
(void)consume; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
const census_aggregation *census_view_aggregrations(const census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
census_view *census_view_create(uint32_t metric_id, const census_tag_set *tags, |
||||||
|
const census_aggregation *aggregations, |
||||||
|
size_t naggregations) { |
||||||
|
(void)metric_id; |
||||||
|
(void)tags; |
||||||
|
(void)aggregations; |
||||||
|
(void)naggregations; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
const census_tag_set *census_view_tags(const census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
void census_view_delete(census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
const census_view_data *census_view_get_data(const census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
size_t census_view_metric(const census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
size_t census_view_naggregations(const census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
||||||
|
|
||||||
|
void census_view_reset(census_view *view) { |
||||||
|
(void)view; |
||||||
|
abort(); |
||||||
|
} |
@ -0,0 +1,141 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2016, 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_WINDOWS_SUBPROCESS |
||||||
|
|
||||||
|
#include <windows.h> |
||||||
|
#include <string.h> |
||||||
|
#include <tchar.h> |
||||||
|
|
||||||
|
#include <grpc/support/alloc.h> |
||||||
|
#include <grpc/support/log.h> |
||||||
|
#include <grpc/support/subprocess.h> |
||||||
|
#include "src/core/support/string.h" |
||||||
|
#include "src/core/support/string_win32.h" |
||||||
|
|
||||||
|
struct gpr_subprocess { |
||||||
|
PROCESS_INFORMATION pi; |
||||||
|
int joined; |
||||||
|
int interrupted; |
||||||
|
}; |
||||||
|
|
||||||
|
const char *gpr_subprocess_binary_extension() { return ".exe"; } |
||||||
|
|
||||||
|
gpr_subprocess *gpr_subprocess_create(int argc, const char **argv) { |
||||||
|
gpr_subprocess *r; |
||||||
|
|
||||||
|
STARTUPINFO si; |
||||||
|
PROCESS_INFORMATION pi; |
||||||
|
|
||||||
|
char *args = gpr_strjoin_sep(argv, argc, " ", NULL); |
||||||
|
TCHAR *args_tchar; |
||||||
|
|
||||||
|
args_tchar = gpr_char_to_tchar(args); |
||||||
|
gpr_free(args); |
||||||
|
|
||||||
|
memset(&si, 0, sizeof(si)); |
||||||
|
si.cb = sizeof(si); |
||||||
|
memset(&pi, 0, sizeof(pi)); |
||||||
|
|
||||||
|
if (!CreateProcess(NULL, args_tchar, NULL, NULL, FALSE, |
||||||
|
CREATE_NEW_PROCESS_GROUP, NULL, NULL, &si, &pi)) { |
||||||
|
gpr_free(args_tchar); |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
gpr_free(args_tchar); |
||||||
|
|
||||||
|
r = gpr_malloc(sizeof(gpr_subprocess)); |
||||||
|
memset(r, 0, sizeof(*r)); |
||||||
|
r->pi = pi; |
||||||
|
return r; |
||||||
|
} |
||||||
|
|
||||||
|
void gpr_subprocess_destroy(gpr_subprocess *p) { |
||||||
|
if (p) { |
||||||
|
if (!p->joined) { |
||||||
|
gpr_subprocess_interrupt(p); |
||||||
|
gpr_subprocess_join(p); |
||||||
|
} |
||||||
|
if (p->pi.hProcess) { |
||||||
|
CloseHandle(p->pi.hProcess); |
||||||
|
} |
||||||
|
if (p->pi.hThread) { |
||||||
|
CloseHandle(p->pi.hThread); |
||||||
|
} |
||||||
|
gpr_free(p); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int gpr_subprocess_join(gpr_subprocess *p) { |
||||||
|
DWORD dwExitCode; |
||||||
|
if (GetExitCodeProcess(p->pi.hProcess, &dwExitCode)) { |
||||||
|
if (dwExitCode == STILL_ACTIVE) { |
||||||
|
if (WaitForSingleObject(p->pi.hProcess, INFINITE) == WAIT_OBJECT_0) { |
||||||
|
p->joined = 1; |
||||||
|
goto getExitCode; |
||||||
|
} |
||||||
|
return -1; // failed to join
|
||||||
|
} else { |
||||||
|
goto getExitCode; |
||||||
|
} |
||||||
|
} else { |
||||||
|
return -1; // failed to get exit code
|
||||||
|
} |
||||||
|
|
||||||
|
getExitCode: |
||||||
|
if (p->interrupted) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
if (GetExitCodeProcess(p->pi.hProcess, &dwExitCode)) { |
||||||
|
return dwExitCode; |
||||||
|
} else { |
||||||
|
return -1; // failed to get exit code
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void gpr_subprocess_interrupt(gpr_subprocess *p) { |
||||||
|
DWORD dwExitCode; |
||||||
|
if (GetExitCodeProcess(p->pi.hProcess, &dwExitCode)) { |
||||||
|
if (dwExitCode == STILL_ACTIVE) { |
||||||
|
gpr_log(GPR_INFO, "sending ctrl-break"); |
||||||
|
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, p->pi.dwProcessId); |
||||||
|
p->joined = 1; |
||||||
|
p->interrupted = 1; |
||||||
|
} |
||||||
|
} |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
#endif /* GPR_WINDOWS_SUBPROCESS */ |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue