aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Sree Kuchibhotla <sreek@google.com>2017-04-08 16:25:58 -0700
committerGravatar Sree Kuchibhotla <sreek@google.com>2017-04-08 16:25:58 -0700
commit1f0c8271146b7fae637aa59a2429af137013fb8b (patch)
tree8e9a3319b386a49e67a79f0ed0d076c6e5d1c9ed /test
parent93b60e05a0a6d3eed569d0e2619aee8eae854c83 (diff)
Fix asan and tsan bugs. Simplify the code
Diffstat (limited to 'test')
-rw-r--r--test/cpp/microbenchmarks/bm_cq_multiple_threads.cc20
1 files changed, 10 insertions, 10 deletions
diff --git a/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc b/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc
index eccbd84d32..8627463204 100644
--- a/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc
+++ b/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc
@@ -36,6 +36,8 @@
#include <atomic>
#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
#include "test/cpp/microbenchmarks/helpers.h"
extern "C" {
@@ -55,8 +57,6 @@ static void* g_tag = (void*)(intptr_t)10; // Some random number
static grpc_completion_queue* g_cq;
static grpc_event_engine_vtable g_vtable;
-static __thread grpc_cq_completion g_cq_completion;
-
static void pollset_shutdown(grpc_exec_ctx* exec_ctx, grpc_pollset* ps,
grpc_closure* closure) {
grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_NONE);
@@ -75,15 +75,18 @@ static grpc_error* pollset_kick(grpc_pollset* p, grpc_pollset_worker* worker) {
/* Callback when the tag is dequeued from the completion queue. Does nothing */
static void cq_done_cb(grpc_exec_ctx* exec_ctx, void* done_arg,
- grpc_cq_completion* cq_completion) {}
+ grpc_cq_completion* cq_completion) {
+ gpr_free(cq_completion);
+}
/* Queues a completion tag. ZERO polling overhead */
static grpc_error* pollset_work(grpc_exec_ctx* exec_ctx, grpc_pollset* ps,
grpc_pollset_worker** worker, gpr_timespec now,
gpr_timespec deadline) {
gpr_mu_unlock(&ps->mu);
+ grpc_cq_begin_op(g_cq, g_tag);
grpc_cq_end_op(exec_ctx, g_cq, g_tag, GRPC_ERROR_NONE, cq_done_cb, NULL,
- &g_cq_completion);
+ (grpc_cq_completion*)gpr_malloc(sizeof(grpc_cq_completion)));
grpc_exec_ctx_flush(exec_ctx);
gpr_mu_lock(&ps->mu);
return GRPC_ERROR_NONE;
@@ -113,7 +116,7 @@ static void teardown() {
grpc_completion_queue_destroy(g_cq);
}
-/* A few notes about Multi-theaded benchmarks:
+/* A few notes about Multi-threaded benchmarks:
Setup:
The benchmark framework ensures that none of the threads proceed beyond the
@@ -136,11 +139,8 @@ static void BM_Cq_Throughput(benchmark::State& state) {
}
while (state.KeepRunning()) {
- grpc_cq_begin_op(g_cq, g_tag);
-
- /* Note that the tag dequeued by the following might have been enqueued
- by another thread. */
- grpc_completion_queue_next(g_cq, deadline, NULL);
+ GPR_ASSERT(grpc_completion_queue_next(g_cq, deadline, NULL).type ==
+ GRPC_OP_COMPLETE);
}
state.SetItemsProcessed(state.iterations());