Introduce a clock type field onto gpr_timespec.
Use it to validate that arithmetic on time types makes even some vague kind of sense.
This commit is contained in:
parent
f0fb537da9
commit
143e7bf0cf
14
build.json
14
build.json
|
|
@ -1770,20 +1770,6 @@
|
|||
"gpr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "time_test",
|
||||
"build": "test",
|
||||
"language": "c",
|
||||
"src": [
|
||||
"test/core/support/time_test.c"
|
||||
],
|
||||
"deps": [
|
||||
"grpc_test_util",
|
||||
"grpc",
|
||||
"gpr_test_util",
|
||||
"gpr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "timeout_encoding_test",
|
||||
"build": "test",
|
||||
|
|
|
|||
|
|
@ -105,7 +105,8 @@ class CompletionQueue : public GrpcLibrary {
|
|||
// Returns false if the queue is ready for destruction, true if event
|
||||
|
||||
bool Next(void** tag, bool* ok) {
|
||||
return (AsyncNextInternal(tag, ok, gpr_inf_future) != SHUTDOWN);
|
||||
return (AsyncNextInternal(tag, ok, gpr_inf_future(GPR_CLOCK_REALTIME)) !=
|
||||
SHUTDOWN);
|
||||
}
|
||||
|
||||
// Shutdown has to be called, and the CompletionQueue can only be
|
||||
|
|
|
|||
|
|
@ -45,15 +45,28 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* The clocks we support. */
|
||||
typedef enum {
|
||||
/* Monotonic clock. Epoch undefined. Always moves forwards. */
|
||||
GPR_CLOCK_MONOTONIC = 0,
|
||||
/* Realtime clock. May jump forwards or backwards. Settable by
|
||||
the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */
|
||||
GPR_CLOCK_REALTIME,
|
||||
/* Unmeasurable clock type: no base, created by taking the difference
|
||||
between two times */
|
||||
GPR_TIMESPAN
|
||||
} gpr_clock_type;
|
||||
|
||||
typedef struct gpr_timespec {
|
||||
time_t tv_sec;
|
||||
int tv_nsec;
|
||||
gpr_clock_type clock_type;
|
||||
} gpr_timespec;
|
||||
|
||||
/* Time constants. */
|
||||
extern const gpr_timespec gpr_time_0; /* The zero time interval. */
|
||||
extern const gpr_timespec gpr_inf_future; /* The far future */
|
||||
extern const gpr_timespec gpr_inf_past; /* The far past. */
|
||||
gpr_timespec gpr_time_0(gpr_clock_type type); /* The zero time interval. */
|
||||
gpr_timespec gpr_inf_future(gpr_clock_type type); /* The far future */
|
||||
gpr_timespec gpr_inf_past(gpr_clock_type type); /* The far past. */
|
||||
|
||||
#define GPR_MS_PER_SEC 1000
|
||||
#define GPR_US_PER_SEC 1000000
|
||||
|
|
@ -62,15 +75,6 @@ extern const gpr_timespec gpr_inf_past; /* The far past. */
|
|||
#define GPR_NS_PER_US 1000
|
||||
#define GPR_US_PER_MS 1000
|
||||
|
||||
/* The clocks we support. */
|
||||
typedef enum {
|
||||
/* Monotonic clock. Epoch undefined. Always moves forwards. */
|
||||
GPR_CLOCK_MONOTONIC = 0,
|
||||
/* Realtime clock. May jump forwards or backwards. Settable by
|
||||
the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */
|
||||
GPR_CLOCK_REALTIME
|
||||
} gpr_clock_type;
|
||||
|
||||
/* initialize time subsystem */
|
||||
void gpr_time_init(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ static void handle_op_after_cancellation(grpc_call_element *elem,
|
|||
mdb.list.head = &calld->status;
|
||||
mdb.list.tail = &calld->details;
|
||||
mdb.garbage.head = mdb.garbage.tail = NULL;
|
||||
mdb.deadline = gpr_inf_future;
|
||||
mdb.deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
grpc_sopb_add_metadata(op->recv_ops, mdb);
|
||||
*op->recv_state = GRPC_STREAM_CLOSED;
|
||||
op->on_done_recv->cb(op->on_done_recv->cb_arg, 1);
|
||||
|
|
@ -518,7 +518,7 @@ static void init_call_elem(grpc_call_element *elem,
|
|||
gpr_mu_init(&calld->mu_state);
|
||||
calld->elem = elem;
|
||||
calld->state = CALL_CREATED;
|
||||
calld->deadline = gpr_inf_future;
|
||||
calld->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
}
|
||||
|
||||
/* Destructor for call_data */
|
||||
|
|
|
|||
|
|
@ -102,7 +102,8 @@ void grpc_alarm_list_init(gpr_timespec now) {
|
|||
|
||||
void grpc_alarm_list_shutdown(void) {
|
||||
int i;
|
||||
while (run_some_expired_alarms(NULL, gpr_inf_future, NULL, 0))
|
||||
while (run_some_expired_alarms(NULL, gpr_inf_future(GPR_CLOCK_REALTIME), NULL,
|
||||
0))
|
||||
;
|
||||
for (i = 0; i < NUM_SHARDS; i++) {
|
||||
shard_type *shard = &g_shards[i];
|
||||
|
|
@ -127,6 +128,7 @@ static gpr_timespec dbl_to_ts(double d) {
|
|||
gpr_timespec ts;
|
||||
ts.tv_sec = d;
|
||||
ts.tv_nsec = 1e9 * (d - ts.tv_sec);
|
||||
ts.clock_type = GPR_TIMESPAN;
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ void grpc_iocp_shutdown(void) {
|
|||
BOOL success;
|
||||
gpr_event_set(&g_shutdown_iocp, (void *)1);
|
||||
grpc_iocp_kick();
|
||||
gpr_event_wait(&g_iocp_done, gpr_inf_future);
|
||||
gpr_event_wait(&g_iocp_done, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
success = CloseHandle(g_iocp);
|
||||
GPR_ASSERT(success);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ static grpc_iomgr_object g_root_object;
|
|||
static void background_callback_executor(void *ignored) {
|
||||
gpr_mu_lock(&g_mu);
|
||||
while (!g_shutdown) {
|
||||
gpr_timespec deadline = gpr_inf_future;
|
||||
gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
gpr_timespec short_deadline =
|
||||
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_millis(100));
|
||||
if (g_cbs_head) {
|
||||
|
|
@ -145,7 +145,7 @@ void grpc_iomgr_shutdown(void) {
|
|||
} while (g_cbs_head);
|
||||
continue;
|
||||
}
|
||||
if (grpc_alarm_check(&g_mu, gpr_inf_future, NULL)) {
|
||||
if (grpc_alarm_check(&g_mu, gpr_inf_future(GPR_CLOCK_REALTIME), NULL)) {
|
||||
gpr_log(GPR_DEBUG, "got late alarm");
|
||||
continue;
|
||||
}
|
||||
|
|
@ -174,7 +174,8 @@ void grpc_iomgr_shutdown(void) {
|
|||
gpr_mu_unlock(&g_mu);
|
||||
|
||||
grpc_kick_poller();
|
||||
gpr_event_wait(&g_background_callback_executor_done, gpr_inf_future);
|
||||
gpr_event_wait(&g_background_callback_executor_done,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
|
||||
grpc_alarm_list_shutdown();
|
||||
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ int grpc_poll_deadline_to_millis_timeout(gpr_timespec deadline,
|
|||
gpr_timespec now) {
|
||||
gpr_timespec timeout;
|
||||
static const int max_spin_polling_us = 10;
|
||||
if (gpr_time_cmp(deadline, gpr_inf_future) == 0) {
|
||||
if (gpr_time_cmp(deadline, gpr_inf_future(GPR_CLOCK_REALTIME)) == 0) {
|
||||
return -1;
|
||||
}
|
||||
if (gpr_time_cmp(
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ void grpc_tcp_server_destroy(grpc_tcp_server *s,
|
|||
}
|
||||
/* This happens asynchronously. Wait while that happens. */
|
||||
while (s->active_ports) {
|
||||
gpr_cv_wait(&s->cv, &s->mu, gpr_inf_future);
|
||||
gpr_cv_wait(&s->cv, &s->mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(&s->mu);
|
||||
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ static void jwt_reset_cache(grpc_jwt_credentials *c) {
|
|||
gpr_free(c->cached.service_url);
|
||||
c->cached.service_url = NULL;
|
||||
}
|
||||
c->cached.jwt_expiration = gpr_inf_past;
|
||||
c->cached.jwt_expiration = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
}
|
||||
|
||||
static void jwt_destroy(grpc_credentials *creds) {
|
||||
|
|
@ -347,8 +347,8 @@ static void jwt_get_request_metadata(grpc_credentials *creds,
|
|||
grpc_credentials_metadata_cb cb,
|
||||
void *user_data) {
|
||||
grpc_jwt_credentials *c = (grpc_jwt_credentials *)creds;
|
||||
gpr_timespec refresh_threshold = {GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS,
|
||||
0};
|
||||
gpr_timespec refresh_threshold =
|
||||
gpr_time_from_seconds(GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS);
|
||||
|
||||
/* See if we can return a cached jwt. */
|
||||
grpc_credentials_md_store *jwt_md = NULL;
|
||||
|
|
@ -516,6 +516,7 @@ grpc_oauth2_token_fetcher_credentials_parse_server_response(
|
|||
access_token->value);
|
||||
token_lifetime->tv_sec = strtol(expires_in->value, NULL, 10);
|
||||
token_lifetime->tv_nsec = 0;
|
||||
token_lifetime->clock_type = GPR_TIMESPAN;
|
||||
if (*token_md != NULL) grpc_credentials_md_store_unref(*token_md);
|
||||
*token_md = grpc_credentials_md_store_create(1);
|
||||
grpc_credentials_md_store_add_cstrings(
|
||||
|
|
@ -552,7 +553,7 @@ static void on_oauth2_token_fetcher_http_response(
|
|||
r->cb(r->user_data, c->access_token_md->entries,
|
||||
c->access_token_md->num_entries, status);
|
||||
} else {
|
||||
c->token_expiration = gpr_inf_past;
|
||||
c->token_expiration = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
r->cb(r->user_data, NULL, 0, status);
|
||||
}
|
||||
gpr_mu_unlock(&c->mu);
|
||||
|
|
@ -564,8 +565,8 @@ static void oauth2_token_fetcher_get_request_metadata(
|
|||
grpc_credentials_metadata_cb cb, void *user_data) {
|
||||
grpc_oauth2_token_fetcher_credentials *c =
|
||||
(grpc_oauth2_token_fetcher_credentials *)creds;
|
||||
gpr_timespec refresh_threshold = {GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS,
|
||||
0};
|
||||
gpr_timespec refresh_threshold =
|
||||
gpr_time_from_seconds(GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS);
|
||||
grpc_credentials_md_store *cached_access_token_md = NULL;
|
||||
{
|
||||
gpr_mu_lock(&c->mu);
|
||||
|
|
@ -596,7 +597,7 @@ static void init_oauth2_token_fetcher(grpc_oauth2_token_fetcher_credentials *c,
|
|||
c->base.type = GRPC_CREDENTIALS_TYPE_OAUTH2;
|
||||
gpr_ref_init(&c->base.refcount, 1);
|
||||
gpr_mu_init(&c->mu);
|
||||
c->token_expiration = gpr_inf_past;
|
||||
c->token_expiration = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
c->fetch_func = fetch_func;
|
||||
grpc_httpcli_context_init(&c->httpcli_context);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ static int is_stack_running_on_compute_engine(void) {
|
|||
|
||||
/* The http call is local. If it takes more than one sec, it is for sure not
|
||||
on compute engine. */
|
||||
gpr_timespec max_detection_delay = {1, 0};
|
||||
gpr_timespec max_detection_delay = gpr_time_from_seconds(1);
|
||||
|
||||
grpc_pollset_init(&detector.pollset);
|
||||
detector.is_done = 0;
|
||||
|
|
@ -112,7 +112,7 @@ static int is_stack_running_on_compute_engine(void) {
|
|||
called once for the lifetime of the process by the default credentials. */
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&detector.pollset));
|
||||
while (!detector.is_done) {
|
||||
grpc_pollset_work(&detector.pollset, gpr_inf_future);
|
||||
grpc_pollset_work(&detector.pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&detector.pollset));
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
/* --- Constants. --- */
|
||||
|
||||
/* 1 hour max. */
|
||||
const gpr_timespec grpc_max_auth_token_lifetime = {3600, 0};
|
||||
const gpr_timespec grpc_max_auth_token_lifetime = {3600, 0, GPR_TIMESPAN};
|
||||
|
||||
#define GRPC_JWT_RSA_SHA256_ALGORITHM "RS256"
|
||||
#define GRPC_JWT_TYPE "JWT"
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ static const char *validate_string_field(const grpc_json *json,
|
|||
|
||||
static gpr_timespec validate_time_field(const grpc_json *json,
|
||||
const char *key) {
|
||||
gpr_timespec result = gpr_time_0;
|
||||
gpr_timespec result = gpr_time_0(GPR_CLOCK_REALTIME);
|
||||
if (json->type != GRPC_JSON_NUMBER) {
|
||||
gpr_log(GPR_ERROR, "Invalid %s field [%s]", key, json->value);
|
||||
return result;
|
||||
|
|
@ -221,17 +221,17 @@ const char *grpc_jwt_claims_audience(const grpc_jwt_claims *claims) {
|
|||
}
|
||||
|
||||
gpr_timespec grpc_jwt_claims_issued_at(const grpc_jwt_claims *claims) {
|
||||
if (claims == NULL) return gpr_inf_past;
|
||||
if (claims == NULL) return gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
return claims->iat;
|
||||
}
|
||||
|
||||
gpr_timespec grpc_jwt_claims_expires_at(const grpc_jwt_claims *claims) {
|
||||
if (claims == NULL) return gpr_inf_future;
|
||||
if (claims == NULL) return gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
return claims->exp;
|
||||
}
|
||||
|
||||
gpr_timespec grpc_jwt_claims_not_before(const grpc_jwt_claims *claims) {
|
||||
if (claims == NULL) return gpr_inf_past;
|
||||
if (claims == NULL) return gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
return claims->nbf;
|
||||
}
|
||||
|
||||
|
|
@ -242,9 +242,9 @@ grpc_jwt_claims *grpc_jwt_claims_from_json(grpc_json *json, gpr_slice buffer) {
|
|||
memset(claims, 0, sizeof(grpc_jwt_claims));
|
||||
claims->json = json;
|
||||
claims->buffer = buffer;
|
||||
claims->iat = gpr_inf_past;
|
||||
claims->nbf = gpr_inf_past;
|
||||
claims->exp = gpr_inf_future;
|
||||
claims->iat = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
claims->nbf = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
claims->exp = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
|
||||
/* Per the spec, all fields are optional. */
|
||||
for (cur = json->child; cur != NULL; cur = cur->next) {
|
||||
|
|
@ -262,13 +262,16 @@ grpc_jwt_claims *grpc_jwt_claims_from_json(grpc_json *json, gpr_slice buffer) {
|
|||
if (claims->jti == NULL) goto error;
|
||||
} else if (strcmp(cur->key, "iat") == 0) {
|
||||
claims->iat = validate_time_field(cur, "iat");
|
||||
if (gpr_time_cmp(claims->iat, gpr_time_0) == 0) goto error;
|
||||
if (gpr_time_cmp(claims->iat, gpr_time_0(GPR_CLOCK_REALTIME)) == 0)
|
||||
goto error;
|
||||
} else if (strcmp(cur->key, "exp") == 0) {
|
||||
claims->exp = validate_time_field(cur, "exp");
|
||||
if (gpr_time_cmp(claims->exp, gpr_time_0) == 0) goto error;
|
||||
if (gpr_time_cmp(claims->exp, gpr_time_0(GPR_CLOCK_REALTIME)) == 0)
|
||||
goto error;
|
||||
} else if (strcmp(cur->key, "nbf") == 0) {
|
||||
claims->nbf = validate_time_field(cur, "nbf");
|
||||
if (gpr_time_cmp(claims->nbf, gpr_time_0) == 0) goto error;
|
||||
if (gpr_time_cmp(claims->nbf, gpr_time_0(GPR_CLOCK_REALTIME)) == 0)
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
return claims;
|
||||
|
|
@ -359,10 +362,10 @@ void verifier_cb_ctx_destroy(verifier_cb_ctx *ctx) {
|
|||
/* --- grpc_jwt_verifier object. --- */
|
||||
|
||||
/* Clock skew defaults to one minute. */
|
||||
gpr_timespec grpc_jwt_verifier_clock_skew = {60, 0};
|
||||
gpr_timespec grpc_jwt_verifier_clock_skew = {60, 0, GPR_TIMESPAN};
|
||||
|
||||
/* Max delay defaults to one minute. */
|
||||
gpr_timespec grpc_jwt_verifier_max_delay = {60, 0};
|
||||
gpr_timespec grpc_jwt_verifier_max_delay = {60, 0, GPR_TIMESPAN};
|
||||
|
||||
typedef struct {
|
||||
char *email_domain;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ void gpr_cv_destroy(gpr_cv *cv) { GPR_ASSERT(pthread_cond_destroy(cv) == 0); }
|
|||
|
||||
int gpr_cv_wait(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline) {
|
||||
int err = 0;
|
||||
if (gpr_time_cmp(abs_deadline, gpr_inf_future) == 0) {
|
||||
if (gpr_time_cmp(abs_deadline, gpr_inf_future(GPR_CLOCK_REALTIME)) == 0) {
|
||||
err = pthread_cond_wait(cv, mu);
|
||||
} else {
|
||||
struct timespec abs_deadline_ts;
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ int gpr_cv_wait(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline) {
|
|||
int timeout = 0;
|
||||
DWORD timeout_max_ms;
|
||||
mu->locked = 0;
|
||||
if (gpr_time_cmp(abs_deadline, gpr_inf_future) == 0) {
|
||||
if (gpr_time_cmp(abs_deadline, gpr_inf_future(GPR_CLOCK_REALTIME)) == 0) {
|
||||
SleepConditionVariableCS(cv, &mu->cs, INFINITE);
|
||||
} else {
|
||||
gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
|
||||
int gpr_time_cmp(gpr_timespec a, gpr_timespec b) {
|
||||
int cmp = (a.tv_sec > b.tv_sec) - (a.tv_sec < b.tv_sec);
|
||||
GPR_ASSERT(a.clock_type == b.clock_type);
|
||||
if (cmp == 0) {
|
||||
cmp = (a.tv_nsec > b.tv_nsec) - (a.tv_nsec < b.tv_nsec);
|
||||
}
|
||||
|
|
@ -71,19 +72,40 @@ gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b) {
|
|||
((t)(TYPE_IS_SIGNED(t) ? (TOP_BIT_OF_TYPE(t) - 1) \
|
||||
: ((TOP_BIT_OF_TYPE(t) - 1) << 1) + 1))
|
||||
|
||||
const gpr_timespec gpr_time_0 = {0, 0};
|
||||
const gpr_timespec gpr_inf_future = {TYPE_MAX(time_t), 0};
|
||||
const gpr_timespec gpr_inf_past = {TYPE_MIN(time_t), 0};
|
||||
gpr_timespec gpr_time_0(gpr_clock_type type) {
|
||||
gpr_timespec out;
|
||||
out.tv_sec = 0;
|
||||
out.tv_nsec = 0;
|
||||
out.clock_type = type;
|
||||
return out;
|
||||
}
|
||||
|
||||
gpr_timespec gpr_inf_future(gpr_clock_type type) {
|
||||
gpr_timespec out;
|
||||
out.tv_sec = TYPE_MAX(time_t);
|
||||
out.tv_nsec = 0;
|
||||
out.clock_type = type;
|
||||
return out;
|
||||
}
|
||||
|
||||
gpr_timespec gpr_inf_past(gpr_clock_type type) {
|
||||
gpr_timespec out;
|
||||
out.tv_sec = TYPE_MIN(time_t);
|
||||
out.tv_nsec = 0;
|
||||
out.clock_type = type;
|
||||
return out;
|
||||
}
|
||||
|
||||
/* TODO(ctiller): consider merging _nanos, _micros, _millis into a single
|
||||
function for maintainability. Similarly for _seconds, _minutes, and _hours */
|
||||
|
||||
gpr_timespec gpr_time_from_nanos(long ns) {
|
||||
gpr_timespec result;
|
||||
result.clock_type = GPR_TIMESPAN;
|
||||
if (ns == LONG_MAX) {
|
||||
result = gpr_inf_future;
|
||||
result = gpr_inf_future(GPR_TIMESPAN);
|
||||
} else if (ns == LONG_MIN) {
|
||||
result = gpr_inf_past;
|
||||
result = gpr_inf_past(GPR_TIMESPAN);
|
||||
} else if (ns >= 0) {
|
||||
result.tv_sec = ns / GPR_NS_PER_SEC;
|
||||
result.tv_nsec = (int)(ns - result.tv_sec * GPR_NS_PER_SEC);
|
||||
|
|
@ -97,10 +119,11 @@ gpr_timespec gpr_time_from_nanos(long ns) {
|
|||
|
||||
gpr_timespec gpr_time_from_micros(long us) {
|
||||
gpr_timespec result;
|
||||
result.clock_type = GPR_TIMESPAN;
|
||||
if (us == LONG_MAX) {
|
||||
result = gpr_inf_future;
|
||||
result = gpr_inf_future(GPR_TIMESPAN);
|
||||
} else if (us == LONG_MIN) {
|
||||
result = gpr_inf_past;
|
||||
result = gpr_inf_past(GPR_TIMESPAN);
|
||||
} else if (us >= 0) {
|
||||
result.tv_sec = us / 1000000;
|
||||
result.tv_nsec = (int)((us - result.tv_sec * 1000000) * 1000);
|
||||
|
|
@ -114,10 +137,11 @@ gpr_timespec gpr_time_from_micros(long us) {
|
|||
|
||||
gpr_timespec gpr_time_from_millis(long ms) {
|
||||
gpr_timespec result;
|
||||
result.clock_type = GPR_TIMESPAN;
|
||||
if (ms == LONG_MAX) {
|
||||
result = gpr_inf_future;
|
||||
result = gpr_inf_future(GPR_TIMESPAN);
|
||||
} else if (ms == LONG_MIN) {
|
||||
result = gpr_inf_past;
|
||||
result = gpr_inf_past(GPR_TIMESPAN);
|
||||
} else if (ms >= 0) {
|
||||
result.tv_sec = ms / 1000;
|
||||
result.tv_nsec = (int)((ms - result.tv_sec * 1000) * 1000000);
|
||||
|
|
@ -131,10 +155,11 @@ gpr_timespec gpr_time_from_millis(long ms) {
|
|||
|
||||
gpr_timespec gpr_time_from_seconds(long s) {
|
||||
gpr_timespec result;
|
||||
result.clock_type = GPR_TIMESPAN;
|
||||
if (s == LONG_MAX) {
|
||||
result = gpr_inf_future;
|
||||
result = gpr_inf_future(GPR_TIMESPAN);
|
||||
} else if (s == LONG_MIN) {
|
||||
result = gpr_inf_past;
|
||||
result = gpr_inf_past(GPR_TIMESPAN);
|
||||
} else {
|
||||
result.tv_sec = s;
|
||||
result.tv_nsec = 0;
|
||||
|
|
@ -144,10 +169,11 @@ gpr_timespec gpr_time_from_seconds(long s) {
|
|||
|
||||
gpr_timespec gpr_time_from_minutes(long m) {
|
||||
gpr_timespec result;
|
||||
result.clock_type = GPR_TIMESPAN;
|
||||
if (m >= LONG_MAX / 60) {
|
||||
result = gpr_inf_future;
|
||||
result = gpr_inf_future(GPR_TIMESPAN);
|
||||
} else if (m <= LONG_MIN / 60) {
|
||||
result = gpr_inf_past;
|
||||
result = gpr_inf_past(GPR_TIMESPAN);
|
||||
} else {
|
||||
result.tv_sec = m * 60;
|
||||
result.tv_nsec = 0;
|
||||
|
|
@ -157,10 +183,11 @@ gpr_timespec gpr_time_from_minutes(long m) {
|
|||
|
||||
gpr_timespec gpr_time_from_hours(long h) {
|
||||
gpr_timespec result;
|
||||
result.clock_type = GPR_TIMESPAN;
|
||||
if (h >= LONG_MAX / 3600) {
|
||||
result = gpr_inf_future;
|
||||
result = gpr_inf_future(GPR_TIMESPAN);
|
||||
} else if (h <= LONG_MIN / 3600) {
|
||||
result = gpr_inf_past;
|
||||
result = gpr_inf_past(GPR_TIMESPAN);
|
||||
} else {
|
||||
result.tv_sec = h * 3600;
|
||||
result.tv_nsec = 0;
|
||||
|
|
@ -171,6 +198,8 @@ gpr_timespec gpr_time_from_hours(long h) {
|
|||
gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b) {
|
||||
gpr_timespec sum;
|
||||
int inc = 0;
|
||||
GPR_ASSERT(b.clock_type == GPR_TIMESPAN);
|
||||
sum.clock_type = a.clock_type;
|
||||
sum.tv_nsec = a.tv_nsec + b.tv_nsec;
|
||||
if (sum.tv_nsec >= GPR_NS_PER_SEC) {
|
||||
sum.tv_nsec -= GPR_NS_PER_SEC;
|
||||
|
|
@ -180,14 +209,14 @@ gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b) {
|
|||
sum = a;
|
||||
} else if (b.tv_sec == TYPE_MAX(time_t) ||
|
||||
(b.tv_sec >= 0 && a.tv_sec >= TYPE_MAX(time_t) - b.tv_sec)) {
|
||||
sum = gpr_inf_future;
|
||||
sum = gpr_inf_future(sum.clock_type);
|
||||
} else if (b.tv_sec == TYPE_MIN(time_t) ||
|
||||
(b.tv_sec <= 0 && a.tv_sec <= TYPE_MIN(time_t) - b.tv_sec)) {
|
||||
sum = gpr_inf_past;
|
||||
sum = gpr_inf_past(sum.clock_type);
|
||||
} else {
|
||||
sum.tv_sec = a.tv_sec + b.tv_sec;
|
||||
if (inc != 0 && sum.tv_sec == TYPE_MAX(time_t) - 1) {
|
||||
sum = gpr_inf_future;
|
||||
sum = gpr_inf_future(sum.clock_type);
|
||||
} else {
|
||||
sum.tv_sec += inc;
|
||||
}
|
||||
|
|
@ -198,6 +227,12 @@ gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b) {
|
|||
gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b) {
|
||||
gpr_timespec diff;
|
||||
int dec = 0;
|
||||
if (b.clock_type == GPR_TIMESPAN) {
|
||||
diff.clock_type = a.clock_type;
|
||||
} else {
|
||||
GPR_ASSERT(a.clock_type == b.clock_type);
|
||||
diff.clock_type = GPR_TIMESPAN;
|
||||
}
|
||||
diff.tv_nsec = a.tv_nsec - b.tv_nsec;
|
||||
if (diff.tv_nsec < 0) {
|
||||
diff.tv_nsec += GPR_NS_PER_SEC;
|
||||
|
|
@ -207,14 +242,14 @@ gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b) {
|
|||
diff = a;
|
||||
} else if (b.tv_sec == TYPE_MIN(time_t) ||
|
||||
(b.tv_sec <= 0 && a.tv_sec >= TYPE_MAX(time_t) + b.tv_sec)) {
|
||||
diff = gpr_inf_future;
|
||||
diff = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
} else if (b.tv_sec == TYPE_MAX(time_t) ||
|
||||
(b.tv_sec >= 0 && a.tv_sec <= TYPE_MIN(time_t) + b.tv_sec)) {
|
||||
diff = gpr_inf_past;
|
||||
diff = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
} else {
|
||||
diff.tv_sec = a.tv_sec - b.tv_sec;
|
||||
if (dec != 0 && diff.tv_sec == TYPE_MIN(time_t) + 1) {
|
||||
diff = gpr_inf_past;
|
||||
diff = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
} else {
|
||||
diff.tv_sec -= dec;
|
||||
}
|
||||
|
|
@ -225,6 +260,9 @@ gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b) {
|
|||
int gpr_time_similar(gpr_timespec a, gpr_timespec b, gpr_timespec threshold) {
|
||||
int cmp_ab;
|
||||
|
||||
GPR_ASSERT(a.clock_type == b.clock_type);
|
||||
GPR_ASSERT(threshold.clock_type == GPR_TIMESPAN);
|
||||
|
||||
cmp_ab = gpr_time_cmp(a, b);
|
||||
if (cmp_ab == 0) return 1;
|
||||
if (cmp_ab < 0) {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <grpc/support/log.h>
|
||||
#include <grpc/support/time.h>
|
||||
|
||||
static struct timespec timespec_from_gpr(gpr_timespec gts) {
|
||||
|
|
@ -48,10 +49,12 @@ static struct timespec timespec_from_gpr(gpr_timespec gts) {
|
|||
}
|
||||
|
||||
#if _POSIX_TIMERS > 0
|
||||
static gpr_timespec gpr_from_timespec(struct timespec ts) {
|
||||
static gpr_timespec gpr_from_timespec(struct timespec ts,
|
||||
gpr_clock_type clock) {
|
||||
gpr_timespec rv;
|
||||
rv.tv_sec = ts.tv_sec;
|
||||
rv.tv_nsec = (int)ts.tv_nsec;
|
||||
rv.clock_type = clock;
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
@ -62,8 +65,9 @@ void gpr_time_init(void) {}
|
|||
|
||||
gpr_timespec gpr_now(gpr_clock_type clock) {
|
||||
struct timespec now;
|
||||
GPR_ASSERT(clock != GPR_TIMESPAN);
|
||||
clock_gettime(clockid_for_gpr_clock[clock], &now);
|
||||
return gpr_from_timespec(now);
|
||||
return gpr_from_timespec(now, clock);
|
||||
}
|
||||
#else
|
||||
/* For some reason Apple's OSes haven't implemented clock_gettime. */
|
||||
|
|
@ -99,6 +103,8 @@ gpr_timespec gpr_now(gpr_clock_type clock) {
|
|||
now.tv_sec = now_dbl * 1e-9;
|
||||
now.tv_nsec = now_dbl - now.tv_sec * 1e9;
|
||||
break;
|
||||
case GPR_TIMESPAN:
|
||||
abort();
|
||||
}
|
||||
|
||||
return now;
|
||||
|
|
|
|||
|
|
@ -329,7 +329,7 @@ grpc_call *grpc_call_create(grpc_channel *channel, grpc_completion_queue *cq,
|
|||
}
|
||||
grpc_call_stack_init(channel_stack, server_transport_data, initial_op_ptr,
|
||||
CALL_STACK_FROM_CALL(call));
|
||||
if (gpr_time_cmp(send_deadline, gpr_inf_future) != 0) {
|
||||
if (gpr_time_cmp(send_deadline, gpr_inf_future(GPR_CLOCK_REALTIME)) != 0) {
|
||||
set_deadline_alarm(call, send_deadline);
|
||||
}
|
||||
return call;
|
||||
|
|
@ -930,7 +930,7 @@ static int fill_send_ops(grpc_call *call, grpc_transport_stream_op *op) {
|
|||
mdb.list = chain_metadata_from_app(call, data.send_metadata.count,
|
||||
data.send_metadata.metadata);
|
||||
mdb.garbage.head = mdb.garbage.tail = NULL;
|
||||
mdb.deadline = gpr_inf_future;
|
||||
mdb.deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
/* send status */
|
||||
/* TODO(ctiller): cache common status values */
|
||||
data = call->request_data[GRPC_IOREQ_SEND_STATUS];
|
||||
|
|
@ -1283,7 +1283,7 @@ static void recv_metadata(grpc_call *call, grpc_metadata_batch *md) {
|
|||
l->md = 0;
|
||||
}
|
||||
}
|
||||
if (gpr_time_cmp(md->deadline, gpr_inf_future) != 0) {
|
||||
if (gpr_time_cmp(md->deadline, gpr_inf_future(GPR_CLOCK_REALTIME)) != 0) {
|
||||
set_deadline_alarm(call, md->deadline);
|
||||
}
|
||||
if (!is_trailing) {
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static void lame_start_transport_stream_op(grpc_call_element *elem,
|
|||
mdb.list.head = &calld->status;
|
||||
mdb.list.tail = &calld->details;
|
||||
mdb.garbage.head = mdb.garbage.tail = NULL;
|
||||
mdb.deadline = gpr_inf_future;
|
||||
mdb.deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
grpc_sopb_add_metadata(op->recv_ops, mdb);
|
||||
*op->recv_state = GRPC_STREAM_CLOSED;
|
||||
op->on_done_recv->cb(op->on_done_recv->cb_arg, 1);
|
||||
|
|
|
|||
|
|
@ -549,7 +549,8 @@ static void server_on_recv(void *ptr, int success) {
|
|||
grpc_stream_op *op = &ops[i];
|
||||
if (op->type != GRPC_OP_METADATA) continue;
|
||||
grpc_metadata_batch_filter(&op->data.metadata, server_filter, elem);
|
||||
if (0 != gpr_time_cmp(op->data.metadata.deadline, gpr_inf_future)) {
|
||||
if (0 != gpr_time_cmp(op->data.metadata.deadline,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME))) {
|
||||
calld->deadline = op->data.metadata.deadline;
|
||||
}
|
||||
calld->got_initial_metadata = 1;
|
||||
|
|
@ -623,7 +624,7 @@ static void accept_stream(void *cd, grpc_transport *transport,
|
|||
channel_data *chand = cd;
|
||||
/* create a call */
|
||||
grpc_call_create(chand->channel, NULL, transport_server_data, NULL, 0,
|
||||
gpr_inf_future);
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
|
||||
static void channel_connectivity_changed(void *cd, int iomgr_status_ignored) {
|
||||
|
|
@ -651,7 +652,7 @@ static void init_call_elem(grpc_call_element *elem,
|
|||
call_data *calld = elem->call_data;
|
||||
channel_data *chand = elem->channel_data;
|
||||
memset(calld, 0, sizeof(call_data));
|
||||
calld->deadline = gpr_inf_future;
|
||||
calld->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
calld->call = grpc_call_from_top_element(elem);
|
||||
gpr_mu_init(&calld->mu_state);
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
|
||||
void grpc_chttp2_incoming_metadata_buffer_init(
|
||||
grpc_chttp2_incoming_metadata_buffer *buffer) {
|
||||
buffer->deadline = gpr_inf_future;
|
||||
buffer->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
}
|
||||
|
||||
void grpc_chttp2_incoming_metadata_buffer_destroy(
|
||||
|
|
@ -87,7 +87,7 @@ void grpc_chttp2_incoming_metadata_buffer_place_metadata_batch_into(
|
|||
b.list.tail = (void *)(gpr_intptr)buffer->count;
|
||||
b.garbage.head = b.garbage.tail = NULL;
|
||||
b.deadline = buffer->deadline;
|
||||
buffer->deadline = gpr_inf_future;
|
||||
buffer->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
|
||||
grpc_sopb_add_metadata(sopb, b);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -594,7 +594,7 @@ static void on_header(void *tp, grpc_mdelem *md) {
|
|||
cached_timeout)) {
|
||||
gpr_log(GPR_ERROR, "Ignoring bad timeout value '%s'",
|
||||
grpc_mdstr_as_c_string(md->value));
|
||||
*cached_timeout = gpr_inf_future;
|
||||
*cached_timeout = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
}
|
||||
grpc_mdelem_set_user_data(md, free_timeout, cached_timeout);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -585,7 +585,8 @@ void grpc_chttp2_encode(grpc_stream_op *ops, size_t ops_count, int eof,
|
|||
l->md = hpack_enc(compressor, l->md, &st);
|
||||
need_unref |= l->md != NULL;
|
||||
}
|
||||
if (gpr_time_cmp(op->data.metadata.deadline, gpr_inf_future) != 0) {
|
||||
if (gpr_time_cmp(op->data.metadata.deadline,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME)) != 0) {
|
||||
deadline_enc(compressor, op->data.metadata.deadline, &st);
|
||||
}
|
||||
curop++;
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ int grpc_chttp2_decode_timeout(const char *buffer, gpr_timespec *timeout) {
|
|||
gpr_uint32 xp = x * 10 + *p - '0';
|
||||
have_digit = 1;
|
||||
if (xp < x) {
|
||||
*timeout = gpr_inf_future;
|
||||
*timeout = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
return 1;
|
||||
}
|
||||
x = xp;
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ void grpc_metadata_batch_assert_ok(grpc_metadata_batch *batch) {
|
|||
void grpc_metadata_batch_init(grpc_metadata_batch *batch) {
|
||||
batch->list.head = batch->list.tail = batch->garbage.head = batch->garbage.tail =
|
||||
NULL;
|
||||
batch->deadline = gpr_inf_future;
|
||||
batch->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
}
|
||||
|
||||
void grpc_metadata_batch_destroy(grpc_metadata_batch *batch) {
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ static void put_metadata_list(gpr_strvec *b, grpc_metadata_batch md) {
|
|||
if (m != md.list.head) gpr_strvec_add(b, gpr_strdup(", "));
|
||||
put_metadata(b, m->md);
|
||||
}
|
||||
if (gpr_time_cmp(md.deadline, gpr_inf_future) != 0) {
|
||||
if (gpr_time_cmp(md.deadline, gpr_inf_future(GPR_CLOCK_REALTIME)) != 0) {
|
||||
char *tmp;
|
||||
gpr_asprintf(&tmp, " deadline=%d.%09d", md.deadline.tv_sec,
|
||||
md.deadline.tv_nsec);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ ClientContext::ClientContext()
|
|||
: initial_metadata_received_(false),
|
||||
call_(nullptr),
|
||||
cq_(nullptr),
|
||||
deadline_(gpr_inf_future) {}
|
||||
deadline_(gpr_inf_future(GPR_CLOCK_REALTIME)) {}
|
||||
|
||||
ClientContext::~ClientContext() {
|
||||
if (call_) {
|
||||
|
|
@ -53,8 +53,8 @@ ClientContext::~ClientContext() {
|
|||
if (cq_) {
|
||||
// Drain cq_.
|
||||
grpc_completion_queue_shutdown(cq_);
|
||||
while (grpc_completion_queue_next(cq_, gpr_inf_future).type !=
|
||||
GRPC_QUEUE_SHUTDOWN)
|
||||
while (grpc_completion_queue_next(cq_, gpr_inf_future(GPR_CLOCK_REALTIME))
|
||||
.type != GRPC_QUEUE_SHUTDOWN)
|
||||
;
|
||||
grpc_completion_queue_destroy(cq_);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@ CompletionQueue::NextStatus CompletionQueue::AsyncNextInternal(
|
|||
}
|
||||
|
||||
bool CompletionQueue::Pluck(CompletionQueueTag* tag) {
|
||||
auto ev = grpc_completion_queue_pluck(cq_, tag, gpr_inf_future);
|
||||
auto ev =
|
||||
grpc_completion_queue_pluck(cq_, tag, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
bool ok = ev.success != 0;
|
||||
void* ignored = tag;
|
||||
GPR_ASSERT(tag->FinalizeResult(&ignored, &ok));
|
||||
|
|
@ -80,7 +81,8 @@ bool CompletionQueue::Pluck(CompletionQueueTag* tag) {
|
|||
}
|
||||
|
||||
void CompletionQueue::TryPluck(CompletionQueueTag* tag) {
|
||||
auto ev = grpc_completion_queue_pluck(cq_, tag, gpr_time_0);
|
||||
auto ev =
|
||||
grpc_completion_queue_pluck(cq_, tag, gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
if (ev.type == GRPC_QUEUE_TIMEOUT) return;
|
||||
bool ok = ev.success != 0;
|
||||
void* ignored = tag;
|
||||
|
|
|
|||
|
|
@ -51,8 +51,9 @@ void Timepoint2Timespec(const system_clock::time_point& from,
|
|||
system_clock::duration deadline = from.time_since_epoch();
|
||||
seconds secs = duration_cast<seconds>(deadline);
|
||||
if (from == system_clock::time_point::max() ||
|
||||
secs.count() >= gpr_inf_future.tv_sec || secs.count() < 0) {
|
||||
*to = gpr_inf_future;
|
||||
secs.count() >= gpr_inf_future(GPR_CLOCK_REALTIME).tv_sec ||
|
||||
secs.count() < 0) {
|
||||
*to = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
return;
|
||||
}
|
||||
nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs);
|
||||
|
|
@ -65,8 +66,9 @@ void TimepointHR2Timespec(const high_resolution_clock::time_point& from,
|
|||
high_resolution_clock::duration deadline = from.time_since_epoch();
|
||||
seconds secs = duration_cast<seconds>(deadline);
|
||||
if (from == high_resolution_clock::time_point::max() ||
|
||||
secs.count() >= gpr_inf_future.tv_sec || secs.count() < 0) {
|
||||
*to = gpr_inf_future;
|
||||
secs.count() >= gpr_inf_future(GPR_CLOCK_REALTIME).tv_sec ||
|
||||
secs.count() < 0) {
|
||||
*to = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
return;
|
||||
}
|
||||
nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs);
|
||||
|
|
@ -75,7 +77,7 @@ void TimepointHR2Timespec(const high_resolution_clock::time_point& from,
|
|||
}
|
||||
|
||||
system_clock::time_point Timespec2Timepoint(gpr_timespec t) {
|
||||
if (gpr_time_cmp(t, gpr_inf_future) == 0) {
|
||||
if (gpr_time_cmp(t, gpr_inf_future(GPR_CLOCK_REALTIME)) == 0) {
|
||||
return system_clock::time_point::max();
|
||||
}
|
||||
system_clock::time_point tp;
|
||||
|
|
|
|||
|
|
@ -302,12 +302,13 @@ grpcsharp_completion_queue_destroy(grpc_completion_queue *cq) {
|
|||
|
||||
GPR_EXPORT grpc_event GPR_CALLTYPE
|
||||
grpcsharp_completion_queue_next(grpc_completion_queue *cq) {
|
||||
return grpc_completion_queue_next(cq, gpr_inf_future);
|
||||
return grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
|
||||
GPR_EXPORT grpc_event GPR_CALLTYPE
|
||||
grpcsharp_completion_queue_pluck(grpc_completion_queue *cq, void *tag) {
|
||||
return grpc_completion_queue_pluck(cq, tag, gpr_inf_future);
|
||||
return grpc_completion_queue_pluck(cq, tag,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
|
||||
/* Channel */
|
||||
|
|
@ -382,7 +383,7 @@ grpcsharp_channel_args_destroy(grpc_channel_args *args) {
|
|||
GPR_EXPORT gpr_timespec GPR_CALLTYPE gprsharp_now(void) { return gpr_now(GPR_CLOCK_REALTIME); }
|
||||
|
||||
GPR_EXPORT gpr_timespec GPR_CALLTYPE gprsharp_inf_future(void) {
|
||||
return gpr_inf_future;
|
||||
return gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
}
|
||||
|
||||
GPR_EXPORT gpr_int32 GPR_CALLTYPE gprsharp_sizeof_timespec(void) {
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ PHP_METHOD(Call, startBatch) {
|
|||
goto cleanup;
|
||||
}
|
||||
event = grpc_completion_queue_pluck(completion_queue, call->wrapped,
|
||||
gpr_inf_future);
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
if (!event.success) {
|
||||
zend_throw_exception(spl_ce_LogicException,
|
||||
"The batch failed for some reason",
|
||||
|
|
|
|||
|
|
@ -43,8 +43,9 @@ void grpc_php_init_completion_queue(TSRMLS_D) {
|
|||
|
||||
void grpc_php_shutdown_completion_queue(TSRMLS_D) {
|
||||
grpc_completion_queue_shutdown(completion_queue);
|
||||
while (grpc_completion_queue_next(completion_queue, gpr_inf_future).type !=
|
||||
GRPC_QUEUE_SHUTDOWN)
|
||||
while (grpc_completion_queue_next(completion_queue,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME))
|
||||
.type != GRPC_QUEUE_SHUTDOWN)
|
||||
;
|
||||
grpc_completion_queue_destroy(completion_queue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,7 +64,8 @@ void free_wrapped_grpc_server(void *object TSRMLS_DC) {
|
|||
wrapped_grpc_server *server = (wrapped_grpc_server *)object;
|
||||
if (server->wrapped != NULL) {
|
||||
grpc_server_shutdown_and_notify(server->wrapped, completion_queue, NULL);
|
||||
grpc_completion_queue_pluck(completion_queue, NULL, gpr_inf_future);
|
||||
grpc_completion_queue_pluck(completion_queue, NULL,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
grpc_server_destroy(server->wrapped);
|
||||
}
|
||||
efree(server);
|
||||
|
|
@ -143,7 +144,8 @@ PHP_METHOD(Server, requestCall) {
|
|||
(long)error_code TSRMLS_CC);
|
||||
goto cleanup;
|
||||
}
|
||||
event = grpc_completion_queue_pluck(completion_queue, NULL, gpr_inf_future);
|
||||
event = grpc_completion_queue_pluck(completion_queue, NULL,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
if (!event.success) {
|
||||
zend_throw_exception(spl_ce_LogicException,
|
||||
"Failed to request a call for some reason",
|
||||
|
|
|
|||
|
|
@ -228,7 +228,8 @@ PHP_METHOD(Timeval, zero) {
|
|||
* @return Timeval Infinite future time value
|
||||
*/
|
||||
PHP_METHOD(Timeval, infFuture) {
|
||||
zval *grpc_php_timeval_inf_future = grpc_php_wrap_timeval(gpr_inf_future);
|
||||
zval *grpc_php_timeval_inf_future =
|
||||
grpc_php_wrap_timeval(gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
RETURN_DESTROY_ZVAL(grpc_php_timeval_inf_future);
|
||||
}
|
||||
|
||||
|
|
@ -237,7 +238,8 @@ PHP_METHOD(Timeval, infFuture) {
|
|||
* @return Timeval Infinite past time value
|
||||
*/
|
||||
PHP_METHOD(Timeval, infPast) {
|
||||
zval *grpc_php_timeval_inf_past = grpc_php_wrap_timeval(gpr_inf_past);
|
||||
zval *grpc_php_timeval_inf_past =
|
||||
grpc_php_wrap_timeval(gpr_inf_past(GPR_CLOCK_REALTIME));
|
||||
RETURN_DESTROY_ZVAL(grpc_php_timeval_inf_past);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -385,7 +385,8 @@ static int pygrpc_isinf(double x) {
|
|||
gpr_timespec pygrpc_cast_double_to_gpr_timespec(double seconds) {
|
||||
gpr_timespec result;
|
||||
if (pygrpc_isinf(seconds)) {
|
||||
result = seconds > 0.0 ? gpr_inf_future : gpr_inf_past;
|
||||
result = seconds > 0.0 ? gpr_inf_future(GPR_CLOCK_REALTIME)
|
||||
: gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
} else {
|
||||
result.tv_sec = (time_t)seconds;
|
||||
result.tv_nsec = ((seconds - result.tv_sec) * 1e9);
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ static void grpc_rb_completion_queue_shutdown_drain(grpc_completion_queue *cq) {
|
|||
next_call.cq = cq;
|
||||
next_call.event.type = GRPC_QUEUE_TIMEOUT;
|
||||
/* TODO: the timeout should be a module level constant that defaults
|
||||
* to gpr_inf_future.
|
||||
* to gpr_inf_future(GPR_CLOCK_REALTIME).
|
||||
*
|
||||
* - at the moment this does not work, it stalls. Using a small timeout like
|
||||
* this one works, and leads to fast test run times; a longer timeout was
|
||||
|
|
@ -143,7 +143,7 @@ grpc_event grpc_rb_completion_queue_pluck_event(VALUE self, VALUE tag,
|
|||
TypedData_Get_Struct(self, grpc_completion_queue,
|
||||
&grpc_rb_completion_queue_data_type, next_call.cq);
|
||||
if (TYPE(timeout) == T_NIL) {
|
||||
next_call.timeout = gpr_inf_future;
|
||||
next_call.timeout = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
} else {
|
||||
next_call.timeout = grpc_rb_time_timeval(timeout, /* absolute time*/ 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,11 +235,11 @@ static void Init_grpc_time_consts() {
|
|||
rb_define_const(
|
||||
grpc_rb_mTimeConsts, "INFINITE_FUTURE",
|
||||
TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type,
|
||||
(void *)&gpr_inf_future));
|
||||
(void *)&gpr_inf_future(GPR_CLOCK_REALTIME)));
|
||||
rb_define_const(
|
||||
grpc_rb_mTimeConsts, "INFINITE_PAST",
|
||||
TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type,
|
||||
(void *)&gpr_inf_past));
|
||||
(void *)&gpr_inf_past(GPR_CLOCK_REALTIME)));
|
||||
rb_define_method(grpc_rb_cTimeVal, "to_time", grpc_rb_time_val_to_time, 0);
|
||||
rb_define_method(grpc_rb_cTimeVal, "inspect", grpc_rb_time_val_inspect, 0);
|
||||
rb_define_method(grpc_rb_cTimeVal, "to_s", grpc_rb_time_val_to_s, 0);
|
||||
|
|
|
|||
|
|
@ -49,11 +49,12 @@ int main(int argc, char **argv) {
|
|||
grpc_server_register_completion_queue(server, cq2);
|
||||
grpc_server_start(server);
|
||||
grpc_server_shutdown_and_notify(server, cq2, NULL);
|
||||
grpc_completion_queue_next(cq2, gpr_inf_future); /* cue queue hang */
|
||||
grpc_completion_queue_next(
|
||||
cq2, gpr_inf_future(GPR_CLOCK_REALTIME)); /* cue queue hang */
|
||||
grpc_completion_queue_shutdown(cq1);
|
||||
grpc_completion_queue_shutdown(cq2);
|
||||
grpc_completion_queue_next(cq1, gpr_inf_future);
|
||||
grpc_completion_queue_next(cq2, gpr_inf_future);
|
||||
grpc_completion_queue_next(cq1, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
grpc_completion_queue_next(cq2, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
grpc_server_destroy(server);
|
||||
grpc_completion_queue_destroy(cq1);
|
||||
grpc_completion_queue_destroy(cq2);
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ int main(int argc, char **argv) {
|
|||
GPR_ASSERT(status == GRPC_STATUS_DEADLINE_EXCEEDED);
|
||||
|
||||
grpc_completion_queue_shutdown(cq);
|
||||
while (grpc_completion_queue_next(cq, gpr_inf_future).type !=
|
||||
GRPC_QUEUE_SHUTDOWN)
|
||||
while (grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME))
|
||||
.type != GRPC_QUEUE_SHUTDOWN)
|
||||
;
|
||||
grpc_completion_queue_destroy(cq);
|
||||
grpc_call_destroy(call);
|
||||
|
|
|
|||
|
|
@ -129,7 +129,8 @@ static void test_max_message_length(grpc_end2end_test_config config) {
|
|||
cqv = cq_verifier_create(f.cq);
|
||||
|
||||
c = grpc_channel_create_call(f.client, f.cq, "/foo",
|
||||
"foo.test.google.fr:1234", gpr_inf_future);
|
||||
"foo.test.google.fr:1234",
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(c);
|
||||
|
||||
grpc_metadata_array_init(&initial_metadata_recv);
|
||||
|
|
|
|||
|
|
@ -89,24 +89,26 @@ static void init_ping_pong_request(void) {
|
|||
}
|
||||
|
||||
static void step_ping_pong_request(void) {
|
||||
call = grpc_channel_create_call(channel, cq, "/Reflector/reflectUnary",
|
||||
"localhost", gpr_inf_future);
|
||||
call =
|
||||
grpc_channel_create_call(channel, cq, "/Reflector/reflectUnary",
|
||||
"localhost", gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(GRPC_CALL_OK ==
|
||||
grpc_call_start_batch(call, ops, op - ops, (void *)1));
|
||||
grpc_completion_queue_next(cq, gpr_inf_future);
|
||||
grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
grpc_call_destroy(call);
|
||||
grpc_byte_buffer_destroy(response_payload_recv);
|
||||
call = NULL;
|
||||
}
|
||||
|
||||
static void init_ping_pong_stream(void) {
|
||||
call = grpc_channel_create_call(channel, cq, "/Reflector/reflectStream",
|
||||
"localhost", gpr_inf_future);
|
||||
call =
|
||||
grpc_channel_create_call(channel, cq, "/Reflector/reflectStream",
|
||||
"localhost", gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
stream_init_op.op = GRPC_OP_SEND_INITIAL_METADATA;
|
||||
stream_init_op.data.send_initial_metadata.count = 0;
|
||||
GPR_ASSERT(GRPC_CALL_OK ==
|
||||
grpc_call_start_batch(call, &stream_init_op, 1, (void *)1));
|
||||
grpc_completion_queue_next(cq, gpr_inf_future);
|
||||
grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
|
||||
grpc_metadata_array_init(&initial_metadata_recv);
|
||||
|
||||
|
|
@ -119,7 +121,7 @@ static void init_ping_pong_stream(void) {
|
|||
static void step_ping_pong_stream(void) {
|
||||
GPR_ASSERT(GRPC_CALL_OK ==
|
||||
grpc_call_start_batch(call, stream_step_ops, 2, (void *)1));
|
||||
grpc_completion_queue_next(cq, gpr_inf_future);
|
||||
grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
grpc_byte_buffer_destroy(response_payload_recv);
|
||||
}
|
||||
|
||||
|
|
@ -208,8 +210,8 @@ int main(int argc, char **argv) {
|
|||
|
||||
grpc_channel_destroy(channel);
|
||||
grpc_completion_queue_shutdown(cq);
|
||||
while (grpc_completion_queue_next(cq, gpr_inf_future).type !=
|
||||
GRPC_QUEUE_SHUTDOWN)
|
||||
while (grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME))
|
||||
.type != GRPC_QUEUE_SHUTDOWN)
|
||||
;
|
||||
grpc_completion_queue_destroy(cq);
|
||||
grpc_byte_buffer_destroy(the_buffer);
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ static gpr_timespec random_deadline(void) {
|
|||
gpr_timespec ts;
|
||||
ts.tv_sec = rand();
|
||||
ts.tv_nsec = rand();
|
||||
ts.clock_type = GPR_CLOCK_REALTIME;
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +102,7 @@ static int *all_top(grpc_alarm_heap *pq, int *n) {
|
|||
|
||||
static void check_pq_top(grpc_alarm *elements, grpc_alarm_heap *pq,
|
||||
gpr_uint8 *inpq, int num_elements) {
|
||||
gpr_timespec max_deadline = gpr_inf_past;
|
||||
gpr_timespec max_deadline = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
int *max_deadline_indices = gpr_malloc(num_elements * sizeof(int));
|
||||
int *top_elements;
|
||||
int num_max_deadline_indices = 0;
|
||||
|
|
|
|||
|
|
@ -107,24 +107,30 @@ static void add_test(void) {
|
|||
grpc_alarm_list_shutdown();
|
||||
}
|
||||
|
||||
static gpr_timespec tfm(int m) {
|
||||
gpr_timespec t = gpr_time_from_millis(m);
|
||||
t.clock_type = GPR_CLOCK_REALTIME;
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Cleaning up a list with pending alarms. */
|
||||
void destruction_test(void) {
|
||||
grpc_alarm alarms[5];
|
||||
|
||||
grpc_alarm_list_init(gpr_time_0);
|
||||
grpc_alarm_list_init(gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
memset(cb_called, 0, sizeof(cb_called));
|
||||
|
||||
grpc_alarm_init(&alarms[0], gpr_time_from_millis(100), cb,
|
||||
(void *)(gpr_intptr)0, gpr_time_0);
|
||||
grpc_alarm_init(&alarms[1], gpr_time_from_millis(3), cb,
|
||||
(void *)(gpr_intptr)1, gpr_time_0);
|
||||
grpc_alarm_init(&alarms[2], gpr_time_from_millis(100), cb,
|
||||
(void *)(gpr_intptr)2, gpr_time_0);
|
||||
grpc_alarm_init(&alarms[3], gpr_time_from_millis(3), cb,
|
||||
(void *)(gpr_intptr)3, gpr_time_0);
|
||||
grpc_alarm_init(&alarms[4], gpr_time_from_millis(1), cb,
|
||||
(void *)(gpr_intptr)4, gpr_time_0);
|
||||
GPR_ASSERT(1 == grpc_alarm_check(NULL, gpr_time_from_millis(2), NULL));
|
||||
grpc_alarm_init(&alarms[0], tfm(100), cb, (void *)(gpr_intptr)0,
|
||||
gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
grpc_alarm_init(&alarms[1], tfm(3), cb, (void *)(gpr_intptr)1,
|
||||
gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
grpc_alarm_init(&alarms[2], tfm(100), cb, (void *)(gpr_intptr)2,
|
||||
gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
grpc_alarm_init(&alarms[3], tfm(3), cb, (void *)(gpr_intptr)3,
|
||||
gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
grpc_alarm_init(&alarms[4], tfm(1), cb, (void *)(gpr_intptr)4,
|
||||
gpr_time_0(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(1 == grpc_alarm_check(NULL, tfm(2), NULL));
|
||||
GPR_ASSERT(1 == cb_called[4][1]);
|
||||
grpc_alarm_cancel(&alarms[0]);
|
||||
grpc_alarm_cancel(&alarms[3]);
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ static int server_start(server *sv) {
|
|||
static void server_wait_and_shutdown(server *sv) {
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
|
||||
while (!sv->done) {
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future);
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
|
||||
}
|
||||
|
|
@ -356,7 +356,7 @@ static void client_start(client *cl, int port) {
|
|||
static void client_wait_and_shutdown(client *cl) {
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
|
||||
while (!cl->done) {
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future);
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
|
||||
}
|
||||
|
|
@ -445,7 +445,7 @@ static void test_grpc_fd_change(void) {
|
|||
/* And now wait for it to run. */
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
|
||||
while (a.cb_that_ran == NULL) {
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future);
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
GPR_ASSERT(a.cb_that_ran == first_read_callback);
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
|
||||
|
|
@ -463,7 +463,7 @@ static void test_grpc_fd_change(void) {
|
|||
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
|
||||
while (b.cb_that_ran == NULL) {
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future);
|
||||
grpc_pollset_work(&g_pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
/* Except now we verify that second_read_callback ran instead */
|
||||
GPR_ASSERT(b.cb_that_ran == second_read_callback);
|
||||
|
|
|
|||
|
|
@ -95,7 +95,8 @@ void test_succeeds(void) {
|
|||
/* connect to it */
|
||||
GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)&addr, &addr_len) == 0);
|
||||
grpc_tcp_client_connect(must_succeed, NULL, &g_pollset_set,
|
||||
(struct sockaddr *)&addr, addr_len, gpr_inf_future);
|
||||
(struct sockaddr *)&addr, addr_len,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
|
||||
/* await the connection */
|
||||
do {
|
||||
|
|
@ -128,7 +129,8 @@ void test_fails(void) {
|
|||
|
||||
/* connect to a broken address */
|
||||
grpc_tcp_client_connect(must_fail, NULL, &g_pollset_set,
|
||||
(struct sockaddr *)&addr, addr_len, gpr_inf_future);
|
||||
(struct sockaddr *)&addr, addr_len,
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
|
||||
|
||||
|
|
|
|||
|
|
@ -181,7 +181,8 @@ int main(int argc, char **argv) {
|
|||
grpc_credentials_get_request_metadata(creds, &sync.pollset, "", on_oauth2_response, &sync);
|
||||
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
|
||||
while (!sync.is_done) grpc_pollset_work(&sync.pollset, gpr_inf_future);
|
||||
while (!sync.is_done)
|
||||
grpc_pollset_work(&sync.pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
|
||||
|
||||
grpc_pollset_destroy(&sync.pollset);
|
||||
|
|
|
|||
|
|
@ -269,8 +269,8 @@ static void check_jwt_header(grpc_json *header) {
|
|||
|
||||
static void check_jwt_claim(grpc_json *claim, const char *expected_audience,
|
||||
const char *expected_scope) {
|
||||
gpr_timespec expiration = {0, 0};
|
||||
gpr_timespec issue_time = {0, 0};
|
||||
gpr_timespec expiration = gpr_time_0(GPR_CLOCK_REALTIME);
|
||||
gpr_timespec issue_time = gpr_time_0(GPR_CLOCK_REALTIME);
|
||||
gpr_timespec parsed_lifetime;
|
||||
grpc_json *iss = NULL;
|
||||
grpc_json *scope = NULL;
|
||||
|
|
|
|||
|
|
@ -1,35 +1,35 @@
|
|||
/*
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
*
|
||||
*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 "src/core/security/jwt_verifier.h"
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ static const char good_jwk_set[] =
|
|||
" ]"
|
||||
"}";
|
||||
|
||||
static gpr_timespec expected_lifetime = {3600, 0};
|
||||
static gpr_timespec expected_lifetime = {3600, 0, GPR_TIMESPAN};
|
||||
|
||||
static const char good_google_email_keys_part1[] =
|
||||
"{\"e6b5137873db8d2ef81e06a47289e6434ec8a165\": \"-----BEGIN "
|
||||
|
|
@ -201,9 +201,9 @@ static void test_expired_claims_failure(void) {
|
|||
gpr_slice s = gpr_slice_from_copied_string(expired_claims);
|
||||
grpc_json *json = grpc_json_parse_string_with_len(
|
||||
(char *)GPR_SLICE_START_PTR(s), GPR_SLICE_LENGTH(s));
|
||||
gpr_timespec exp_iat = {100, 0};
|
||||
gpr_timespec exp_exp = {120, 0};
|
||||
gpr_timespec exp_nbf = {60, 0};
|
||||
gpr_timespec exp_iat = {100, 0, GPR_CLOCK_REALTIME};
|
||||
gpr_timespec exp_exp = {120, 0, GPR_CLOCK_REALTIME};
|
||||
gpr_timespec exp_nbf = {60, 0, GPR_CLOCK_REALTIME};
|
||||
GPR_ASSERT(json != NULL);
|
||||
claims = grpc_jwt_claims_from_json(json, s);
|
||||
GPR_ASSERT(claims != NULL);
|
||||
|
|
|
|||
|
|
@ -95,7 +95,8 @@ int main(int argc, char **argv) {
|
|||
on_metadata_response, &sync);
|
||||
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
|
||||
while (!sync.is_done) grpc_pollset_work(&sync.pollset, gpr_inf_future);
|
||||
while (!sync.is_done)
|
||||
grpc_pollset_work(&sync.pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
|
||||
|
||||
grpc_credentials_release(creds);
|
||||
|
|
|
|||
|
|
@ -109,7 +109,8 @@ int main(int argc, char **argv) {
|
|||
on_jwt_verification_done, &sync);
|
||||
|
||||
gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
|
||||
while (!sync.is_done) grpc_pollset_work(&sync.pollset, gpr_inf_future);
|
||||
while (!sync.is_done)
|
||||
grpc_pollset_work(&sync.pollset, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
|
||||
|
||||
grpc_jwt_verifier_destroy(verifier);
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ static void multiple_writers_single_reader(int circular_log) {
|
|||
/* Wait for writers to finish. */
|
||||
gpr_mu_lock(&writers_mu);
|
||||
while (writers_count != 0) {
|
||||
gpr_cv_wait(&writers_done, &writers_mu, gpr_inf_future);
|
||||
gpr_cv_wait(&writers_done, &writers_mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(&writers_mu);
|
||||
gpr_mu_destroy(&writers_mu);
|
||||
|
|
@ -323,7 +323,7 @@ static void multiple_writers_single_reader(int circular_log) {
|
|||
}
|
||||
/* wait for reader to finish */
|
||||
while (reader.running) {
|
||||
gpr_cv_wait(&reader_done, &reader_mu, gpr_inf_future);
|
||||
gpr_cv_wait(&reader_done, &reader_mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
if (circular_log) {
|
||||
/* Assert that there were no out-of-space errors. */
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ static void test_concurrency(void) {
|
|||
gpr_mu_lock(&arg.mu);
|
||||
while (arg.num_done < NUM_THREADS) {
|
||||
gpr_log(GPR_INFO, "num done %d", arg.num_done);
|
||||
gpr_cv_wait(&arg.done, &arg.mu, gpr_inf_future);
|
||||
gpr_cv_wait(&arg.done, &arg.mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(&arg.mu);
|
||||
census_tracing_shutdown();
|
||||
|
|
|
|||
|
|
@ -290,8 +290,8 @@ void infinite_interval_test(void) {
|
|||
int i;
|
||||
const int count = 100000;
|
||||
gpr_timespec increment = {0, 0};
|
||||
struct census_window_stats* stats =
|
||||
census_window_stats_create(1, &gpr_inf_future, 10, &kMyStatInfo);
|
||||
struct census_window_stats* stats = census_window_stats_create(
|
||||
1, &gpr_inf_future(GPR_CLOCK_REALTIME), 10, &kMyStatInfo);
|
||||
srand(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
|
||||
for (i = 0; i < count; i++) {
|
||||
increment.tv_sec = rand() % 21600; /* 6 hours */
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@ struct test {
|
|||
static void thd_body(void *v) {
|
||||
struct test *t = v;
|
||||
gpr_mu_lock(&t->mu);
|
||||
while (!gpr_cv_cancellable_wait(&t->cv, &t->mu, gpr_inf_future, &t->cancel)) {
|
||||
while (!gpr_cv_cancellable_wait(
|
||||
&t->cv, &t->mu, gpr_inf_future(GPR_CLOCK_REALTIME), &t->cancel)) {
|
||||
}
|
||||
t->n--;
|
||||
if (t->n == 0) {
|
||||
|
|
@ -125,7 +126,7 @@ static void test(void) {
|
|||
GPR_ASSERT(gpr_cancellable_is_cancelled(&t.cancel));
|
||||
|
||||
/* Wait for threads to finish. */
|
||||
gpr_event_wait(&t.done, gpr_inf_future);
|
||||
gpr_event_wait(&t.done, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(t.n == 0);
|
||||
|
||||
/* Test timeout on cv wait for cancelled gpr_cancellable */
|
||||
|
|
|
|||
|
|
@ -81,13 +81,14 @@ void queue_destroy(queue *q) {
|
|||
void queue_append(queue *q, int x) {
|
||||
gpr_mu_lock(&q->mu);
|
||||
/* To wait for a predicate without a deadline, loop on the negation of the
|
||||
predicate, and use gpr_cv_wait(..., gpr_inf_future) inside the loop
|
||||
predicate, and use gpr_cv_wait(..., gpr_inf_future(GPR_CLOCK_REALTIME))
|
||||
inside the loop
|
||||
to release the lock, wait, and reacquire on each iteration. Code that
|
||||
makes the condition true should use gpr_cv_broadcast() on the
|
||||
corresponding condition variable. The predicate must be on state
|
||||
protected by the lock. */
|
||||
while (q->length == N) {
|
||||
gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future);
|
||||
gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
|
||||
/* It's normal to use gpr_cv_broadcast() or gpr_signal() while
|
||||
|
|
@ -209,7 +210,7 @@ static void test_create_threads(struct test *m, void (*body)(void *arg)) {
|
|||
static void test_wait(struct test *m) {
|
||||
gpr_mu_lock(&m->mu);
|
||||
while (m->done != 0) {
|
||||
gpr_cv_wait(&m->done_cv, &m->mu, gpr_inf_future);
|
||||
gpr_cv_wait(&m->done_cv, &m->mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(&m->mu);
|
||||
}
|
||||
|
|
@ -306,7 +307,7 @@ static void inc_by_turns(void *v /*=m*/) {
|
|||
for (i = 0; i != m->iterations; i++) {
|
||||
gpr_mu_lock(&m->mu);
|
||||
while ((m->counter % m->threads) != id) {
|
||||
gpr_cv_wait(&m->cv, &m->mu, gpr_inf_future);
|
||||
gpr_cv_wait(&m->cv, &m->mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
m->counter++;
|
||||
gpr_cv_broadcast(&m->cv);
|
||||
|
|
@ -379,7 +380,7 @@ static void consumer(void *v /*=m*/) {
|
|||
gpr_int64 i;
|
||||
int value;
|
||||
for (i = 0; i != n; i++) {
|
||||
queue_remove(&m->q, &value, gpr_inf_future);
|
||||
queue_remove(&m->q, &value, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_lock(&m->mu);
|
||||
m->counter = n;
|
||||
|
|
@ -426,7 +427,8 @@ static void refcheck(void *v /*=m*/) {
|
|||
struct test *m = v;
|
||||
gpr_int64 n = m->iterations * m->threads;
|
||||
gpr_int64 i;
|
||||
GPR_ASSERT(gpr_event_wait(&m->event, gpr_inf_future) == (void *)1);
|
||||
GPR_ASSERT(gpr_event_wait(&m->event, gpr_inf_future(GPR_CLOCK_REALTIME)) ==
|
||||
(void *)1);
|
||||
GPR_ASSERT(gpr_event_get(&m->event) == (void *)1);
|
||||
for (i = 1; i != n; i++) {
|
||||
GPR_ASSERT(!gpr_unref(&m->refcount));
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ static void test(void) {
|
|||
}
|
||||
gpr_mu_lock(&t.mu);
|
||||
while (!t.is_done) {
|
||||
gpr_cv_wait(&t.done_cv, &t.mu, gpr_inf_future);
|
||||
gpr_cv_wait(&t.done_cv, &t.mu, gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
gpr_mu_unlock(&t.mu);
|
||||
GPR_ASSERT(t.n == 0);
|
||||
|
|
|
|||
|
|
@ -91,10 +91,10 @@ static void ts_to_s(gpr_timespec t,
|
|||
static void test_values(void) {
|
||||
int i;
|
||||
|
||||
gpr_timespec x = gpr_time_0;
|
||||
gpr_timespec x = gpr_time_0(GPR_CLOCK_REALTIME);
|
||||
GPR_ASSERT(x.tv_sec == 0 && x.tv_nsec == 0);
|
||||
|
||||
x = gpr_inf_future;
|
||||
x = gpr_inf_future(GPR_CLOCK_REALTIME);
|
||||
fprintf(stderr, "far future ");
|
||||
u_to_s(x.tv_sec, 16, 16, &to_fp, stderr);
|
||||
fprintf(stderr, "\n");
|
||||
|
|
@ -103,7 +103,7 @@ static void test_values(void) {
|
|||
ts_to_s(x, &to_fp, stderr);
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
x = gpr_inf_past;
|
||||
x = gpr_inf_past(GPR_CLOCK_REALTIME);
|
||||
fprintf(stderr, "far past ");
|
||||
u_to_s(x.tv_sec, 16, 16, &to_fp, stderr);
|
||||
fprintf(stderr, "\n");
|
||||
|
|
@ -184,51 +184,61 @@ static void test_overflow(void) {
|
|||
gpr_timespec x = gpr_time_from_micros(1);
|
||||
do {
|
||||
x = gpr_time_add(x, x);
|
||||
} while (gpr_time_cmp(x, gpr_inf_future) < 0);
|
||||
GPR_ASSERT(gpr_time_cmp(x, gpr_inf_future) == 0);
|
||||
} while (gpr_time_cmp(x, gpr_inf_future(GPR_TIMESPAN)) < 0);
|
||||
GPR_ASSERT(gpr_time_cmp(x, gpr_inf_future(GPR_TIMESPAN)) == 0);
|
||||
x = gpr_time_from_micros(-1);
|
||||
do {
|
||||
x = gpr_time_add(x, x);
|
||||
} while (gpr_time_cmp(x, gpr_inf_past) > 0);
|
||||
GPR_ASSERT(gpr_time_cmp(x, gpr_inf_past) == 0);
|
||||
} while (gpr_time_cmp(x, gpr_inf_past(GPR_TIMESPAN)) > 0);
|
||||
GPR_ASSERT(gpr_time_cmp(x, gpr_inf_past(GPR_TIMESPAN)) == 0);
|
||||
}
|
||||
|
||||
static void test_sticky_infinities(void) {
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
static const gpr_timespec *infinity[] = {&gpr_inf_future, &gpr_inf_past};
|
||||
static const gpr_timespec *addend[] = {&gpr_inf_future, &gpr_inf_past,
|
||||
&gpr_time_0, NULL};
|
||||
gpr_timespec infinity[2];
|
||||
gpr_timespec addend[3];
|
||||
infinity[0] = gpr_inf_future(GPR_TIMESPAN);
|
||||
infinity[1] = gpr_inf_past(GPR_TIMESPAN);
|
||||
addend[0] = gpr_inf_future(GPR_TIMESPAN);
|
||||
addend[1] = gpr_inf_past(GPR_TIMESPAN);
|
||||
addend[2] = gpr_time_0(GPR_TIMESPAN);
|
||||
|
||||
/* Infinities are sticky */
|
||||
for (i = 0; i != sizeof(infinity) / sizeof(infinity[0]); i++) {
|
||||
for (j = 0; j != sizeof(addend) / sizeof(addend[0]); j++) {
|
||||
if (addend[j] == NULL) {
|
||||
for (k = -200; k <= 200; k++) {
|
||||
gpr_timespec y = gpr_time_from_micros(k * 100000);
|
||||
gpr_timespec x = gpr_time_add(*infinity[i], y);
|
||||
GPR_ASSERT(gpr_time_cmp(x, *infinity[i]) == 0);
|
||||
x = gpr_time_sub(*infinity[i], y);
|
||||
GPR_ASSERT(gpr_time_cmp(x, *infinity[i]) == 0);
|
||||
}
|
||||
} else {
|
||||
gpr_timespec x = gpr_time_add(*infinity[i], *addend[j]);
|
||||
GPR_ASSERT(gpr_time_cmp(x, *infinity[i]) == 0);
|
||||
x = gpr_time_sub(*infinity[i], *addend[j]);
|
||||
GPR_ASSERT(gpr_time_cmp(x, *infinity[i]) == 0);
|
||||
}
|
||||
gpr_timespec x = gpr_time_add(infinity[i], addend[j]);
|
||||
GPR_ASSERT(gpr_time_cmp(x, infinity[i]) == 0);
|
||||
x = gpr_time_sub(infinity[i], addend[j]);
|
||||
GPR_ASSERT(gpr_time_cmp(x, infinity[i]) == 0);
|
||||
}
|
||||
for (k = -200; k <= 200; k++) {
|
||||
gpr_timespec y = gpr_time_from_micros(k * 100000);
|
||||
gpr_timespec x = gpr_time_add(infinity[i], y);
|
||||
GPR_ASSERT(gpr_time_cmp(x, infinity[i]) == 0);
|
||||
x = gpr_time_sub(infinity[i], y);
|
||||
GPR_ASSERT(gpr_time_cmp(x, infinity[i]) == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void test_similar(void) {
|
||||
GPR_ASSERT(1 == gpr_time_similar(gpr_inf_future, gpr_inf_future, gpr_time_0));
|
||||
GPR_ASSERT(1 == gpr_time_similar(gpr_inf_past, gpr_inf_past, gpr_time_0));
|
||||
GPR_ASSERT(0 == gpr_time_similar(gpr_inf_past, gpr_inf_future, gpr_time_0));
|
||||
GPR_ASSERT(0 == gpr_time_similar(gpr_inf_future, gpr_inf_past, gpr_time_0));
|
||||
GPR_ASSERT(1 == gpr_time_similar(gpr_inf_future(GPR_TIMESPAN),
|
||||
gpr_inf_future(GPR_TIMESPAN),
|
||||
gpr_time_0(GPR_TIMESPAN)));
|
||||
GPR_ASSERT(1 == gpr_time_similar(gpr_inf_past(GPR_TIMESPAN),
|
||||
gpr_inf_past(GPR_TIMESPAN),
|
||||
gpr_time_0(GPR_TIMESPAN)));
|
||||
GPR_ASSERT(0 == gpr_time_similar(gpr_inf_past(GPR_TIMESPAN),
|
||||
gpr_inf_future(GPR_TIMESPAN),
|
||||
gpr_time_0(GPR_TIMESPAN)));
|
||||
GPR_ASSERT(0 == gpr_time_similar(gpr_inf_future(GPR_TIMESPAN),
|
||||
gpr_inf_past(GPR_TIMESPAN),
|
||||
gpr_time_0(GPR_TIMESPAN)));
|
||||
GPR_ASSERT(1 == gpr_time_similar(gpr_time_from_micros(10),
|
||||
gpr_time_from_micros(10), gpr_time_0));
|
||||
gpr_time_from_micros(10),
|
||||
gpr_time_0(GPR_TIMESPAN)));
|
||||
GPR_ASSERT(1 == gpr_time_similar(gpr_time_from_micros(10),
|
||||
gpr_time_from_micros(15),
|
||||
gpr_time_from_micros(10)));
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ static void *create_test_tag(void) {
|
|||
static void shutdown_and_destroy(grpc_completion_queue *cc) {
|
||||
grpc_event ev;
|
||||
grpc_completion_queue_shutdown(cc);
|
||||
ev = grpc_completion_queue_next(cc, gpr_inf_past);
|
||||
ev = grpc_completion_queue_next(cc, gpr_inf_past(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(ev.type == GRPC_QUEUE_SHUTDOWN);
|
||||
grpc_completion_queue_destroy(cc);
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ static void test_cq_end_op(void) {
|
|||
grpc_cq_begin_op(cc, NULL);
|
||||
grpc_cq_end_op(cc, tag, NULL, 1);
|
||||
|
||||
ev = grpc_completion_queue_next(cc, gpr_inf_past);
|
||||
ev = grpc_completion_queue_next(cc, gpr_inf_past(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(ev.type == GRPC_OP_COMPLETE);
|
||||
GPR_ASSERT(ev.tag == tag);
|
||||
GPR_ASSERT(ev.success);
|
||||
|
|
@ -100,8 +100,8 @@ static void test_shutdown_then_next_polling(void) {
|
|||
|
||||
cc = grpc_completion_queue_create();
|
||||
grpc_completion_queue_shutdown(cc);
|
||||
GPR_ASSERT(grpc_completion_queue_next(cc, gpr_inf_past).type ==
|
||||
GRPC_QUEUE_SHUTDOWN);
|
||||
GPR_ASSERT(grpc_completion_queue_next(cc, gpr_inf_past(GPR_CLOCK_REALTIME))
|
||||
.type == GRPC_QUEUE_SHUTDOWN);
|
||||
grpc_completion_queue_destroy(cc);
|
||||
}
|
||||
|
||||
|
|
@ -111,8 +111,8 @@ static void test_shutdown_then_next_with_timeout(void) {
|
|||
|
||||
cc = grpc_completion_queue_create();
|
||||
grpc_completion_queue_shutdown(cc);
|
||||
GPR_ASSERT(grpc_completion_queue_next(cc, gpr_inf_future).type ==
|
||||
GRPC_QUEUE_SHUTDOWN);
|
||||
GPR_ASSERT(grpc_completion_queue_next(cc, gpr_inf_future(GPR_CLOCK_REALTIME))
|
||||
.type == GRPC_QUEUE_SHUTDOWN);
|
||||
grpc_completion_queue_destroy(cc);
|
||||
}
|
||||
|
||||
|
|
@ -139,7 +139,8 @@ static void test_pluck(void) {
|
|||
}
|
||||
|
||||
for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
|
||||
ev = grpc_completion_queue_pluck(cc, tags[i], gpr_inf_past);
|
||||
ev = grpc_completion_queue_pluck(cc, tags[i],
|
||||
gpr_inf_past(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(ev.tag == tags[i]);
|
||||
}
|
||||
|
||||
|
|
@ -150,7 +151,7 @@ static void test_pluck(void) {
|
|||
|
||||
for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
|
||||
ev = grpc_completion_queue_pluck(cc, tags[GPR_ARRAY_SIZE(tags) - i - 1],
|
||||
gpr_inf_past);
|
||||
gpr_inf_past(GPR_CLOCK_REALTIME));
|
||||
GPR_ASSERT(ev.tag == tags[GPR_ARRAY_SIZE(tags) - i - 1]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -124,7 +124,8 @@ void test_decoding(void) {
|
|||
decode_suite('S', gpr_time_from_seconds);
|
||||
decode_suite('M', gpr_time_from_minutes);
|
||||
decode_suite('H', gpr_time_from_hours);
|
||||
assert_decodes_as("1000000000000000000000u", gpr_inf_future);
|
||||
assert_decodes_as("1000000000000000000000u",
|
||||
gpr_inf_future(GPR_CLOCK_REALTIME));
|
||||
}
|
||||
|
||||
void test_decoding_fails(void) {
|
||||
|
|
|
|||
|
|
@ -917,20 +917,6 @@
|
|||
"test/core/iomgr/time_averaged_stats_test.c"
|
||||
]
|
||||
},
|
||||
{
|
||||
"deps": [
|
||||
"gpr",
|
||||
"gpr_test_util",
|
||||
"grpc",
|
||||
"grpc_test_util"
|
||||
],
|
||||
"headers": [],
|
||||
"language": "c",
|
||||
"name": "time_test",
|
||||
"src": [
|
||||
"test/core/support/time_test.c"
|
||||
]
|
||||
},
|
||||
{
|
||||
"deps": [
|
||||
"gpr",
|
||||
|
|
|
|||
|
|
@ -522,15 +522,6 @@
|
|||
"posix"
|
||||
]
|
||||
},
|
||||
{
|
||||
"flaky": false,
|
||||
"language": "c",
|
||||
"name": "time_test",
|
||||
"platforms": [
|
||||
"windows",
|
||||
"posix"
|
||||
]
|
||||
},
|
||||
{
|
||||
"flaky": false,
|
||||
"language": "c",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue