diff --git a/include/grpc++/alarm.h b/include/grpc++/alarm.h index f0ab546cb2..9979c34e4f 100644 --- a/include/grpc++/alarm.h +++ b/include/grpc++/alarm.h @@ -36,6 +36,7 @@ #ifndef GRPCXX_ALARM_H #define GRPCXX_ALARM_H +#include #include #include @@ -63,6 +64,19 @@ class Alarm : private GrpcLibrary { void Cancel(); private: + class AlarmEntry : public CompletionQueueTag { + public: + AlarmEntry(void* tag) : tag_(tag) {} + bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE { + *tag = tag_; + return true; + } + + private: + void* tag_; + }; + + AlarmEntry tag_; grpc_alarm* const alarm_; // owned }; diff --git a/src/cpp/common/alarm.cc b/src/cpp/common/alarm.cc index aca15dc5eb..a289688768 100644 --- a/src/cpp/common/alarm.cc +++ b/src/cpp/common/alarm.cc @@ -32,29 +32,15 @@ #include #include -#include #include #include namespace grpc { -class AlarmEntry : public CompletionQueueTag { - public: - AlarmEntry(void* tag) : tag_(tag) {} - bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE { - *tag = tag_; - delete this; - return true; - } - - private: - void* tag_; -}; - static internal::GrpcLibraryInitializer g_gli_initializer; Alarm::Alarm(CompletionQueue* cq, gpr_timespec deadline, void* tag) - : alarm_(grpc_alarm_create(cq->cq(), deadline, - static_cast(new AlarmEntry(tag)))) { + : tag_(tag), + alarm_(grpc_alarm_create(cq->cq(), deadline, static_cast(&tag_))) { g_gli_initializer.summon(); }