Woo hoo! That fixed it! Thanks Sree.

Cheers,
-RK

On Thursday, November 17, 2016 at 2:58:59 PM UTC-5, Sree Kuchibhotla wrote:
>
>
> Looks like you are doing two async operations together in your server: (in 
> calldata when status == PROCESS)
>
> *            responder_.Write (reply_, this);*
> *            responder_.Finish(grpc::Status::OK, this);*
>
> Instead try one operation at a time..For example, add a new state (for 
> example: DESTROY) and you can modify the CallData's Process() function the 
> following way:
>
>    enum CallStatus { CREATE, PROCESS, FINISH, DESTROY };
>
>    void Proceed() {
>         if (status_ == CREATE) {
>             status_ = PROCESS;
>             service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, 
> cq_, this);
>         } else if (status_ == PROCESS) {
>             new CallData(service_, cq_);
>             reply_.set_reply("hello " + request_.message());
>             responder_.Write (reply_, this); // Do only Write here. Not 
> Finish
>             status_ = FINISH;
>         } else if (status_ == FINISH) {
>             responder_.Finish(grpc::Status::OK, this);  // Do Finish 
> here.. Not 'delete this'
>             status_ = DESTROY
>         } else {
>             GPR_ASSERT(status_ == *DESTROY*); 
>             delete this;
>         }
>     }
>
> Let me know if that works.
>
> thanks,
> Sree
>
> On Thursday, November 17, 2016 at 6:23:25 AM UTC-8, [email protected] 
> wrote:
>>
>>
>> OK, tracked it down to 
>> grpc-1.0.0/include/grpc++/impl/codegen/completion_queue_tag.h -- the pure 
>> virtual function "bool FinalizeResult()" -- what do I need to do to 
>> initialize it that I'm not doing in the program above? (As a hack, I just 
>> had it print a message to stdout and return "false", now the program 
>> doesn't give the "pure virtual method" error, but obviously isn't working 
>> completely as intended)
>>
>> On Wednesday, November 16, 2016 at 9:12:43 AM UTC-5, [email protected] 
>> wrote:
>>>
>>> Sadly, I'm still stuck. I don't know enough C++ to be able to diagnose 
>>> this further... :-(
>>>
>>> On Tuesday, November 15, 2016 at 2:01:50 PM UTC-5, [email protected] 
>>> wrote:
>>>>
>>>> Ok:
>>>>
>>>> *(gdb) handle SIG36 noprint*
>>>> *Signal        Stop      Print   Pass to program Description*
>>>> *SIG36         No        No      Yes             Real-time event 36*
>>>> *(gdb) run*
>>>> *Starting program: /.../minfail*
>>>> *[Thread debugging using libthread_db enabled]*
>>>> *D1115 13:59:40.187940393   34391 env_linux.c:77]             Warning: 
>>>> insecure environment read function 'getenv' used*
>>>> *[New Thread 0x7ffff6fcc700 (LWP 34394)]*
>>>> *[New Thread 0x7ffff65cb700 (LWP 34395)]*
>>>> *[New Thread 0x7ffff5bca700 (LWP 34396)]*
>>>> *[New Thread 0x7ffff51c9700 (LWP 34397)]*
>>>> *[New Thread 0x7ffff47c8700 (LWP 34398)]*
>>>> *[New Thread 0x7ffff3dc7700 (LWP 34399)]*
>>>> *[New Thread 0x7ffff33c6700 (LWP 34400)]*
>>>> *[New Thread 0x7ffff29c5700 (LWP 34401)]*
>>>> *[New Thread 0x7ffff1fc4700 (LWP 34402)]*
>>>> *[New Thread 0x7ffff15c3700 (LWP 34403)]*
>>>> *[New Thread 0x7ffff0bc2700 (LWP 34404)]*
>>>> *[New Thread 0x7ffff01c1700 (LWP 34405)]*
>>>> *[New Thread 0x7fffef7c0700 (LWP 34406)]*
>>>> *[New Thread 0x7fffeedbf700 (LWP 34407)]*
>>>> *[New Thread 0x7fffee3be700 (LWP 34408)]*
>>>> *[New Thread 0x7fffed9bd700 (LWP 34409)]*
>>>> *pure virtual method called*
>>>> *terminate called without an active exception*
>>>>
>>>> *Program received signal SIGABRT, Aborted.*
>>>> *0x00000035ce0325e5 in raise () from /lib64/libc.so.6*
>>>> *(gdb) bt*
>>>> *#0  0x00000035ce0325e5 in raise () from /lib64/libc.so.6*
>>>> *#1  0x00000035ce033dc5 in abort () from /lib64/libc.so.6*
>>>> *#2  0x00000035d4cbea7d in __gnu_cxx::__verbose_terminate_handler() () 
>>>> from /usr/lib64/libstdc++.so.6*
>>>> *#3  0x00000035d4cbcbd6 in ?? () from /usr/lib64/libstdc++.so.6*
>>>> *#4  0x00000035d4cbcc03 in std::terminate() () from 
>>>> /usr/lib64/libstdc++.so.6*
>>>> *#5  0x00000035d4cbd55f in __cxa_pure_virtual () from 
>>>> /usr/lib64/libstdc++.so.6*
>>>> *#6  0x00007ffff76e3f7a in 
>>>> grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) () 
>>>> from /.../lib/libgrpc++.so.1*
>>>> *#7  0x000000000040919f in grpc::CompletionQueue::Next 
>>>> [_ZN4grpc15Completion...] (this=0x628fa0, tag=0x7fffffffe1e8, 
>>>> ok=0x7fffffffe1e7) at 
>>>> .../include/grpc++/impl/codegen/completion_queue.h:148*
>>>> *#8  0x00000000004085ca in main [main] (argc=1, argv=0x7fffffffe3a8) at 
>>>> minfail.cc:95*
>>>> *(gdb)*
>>>>
>>>>
>>>> On Tuesday, November 15, 2016 at 1:55:48 PM UTC-5, Craig Tiller wrote:
>>>>>
>>>>> You probably want to first do 'handle SIG36 noprint' to let gdb pass 
>>>>> the (totally legitimate) signal to the application.
>>>>>
>>>>> On Tue, Nov 15, 2016 at 8:56 AM <[email protected]> wrote:
>>>>>
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I've created a tiny code sample that is based off the hello world 
>>>>>> async greeter example. I keep getting a "pure virtual method called" in 
>>>>>> the 
>>>>>> grpc_completion_queue_next() function, and I'm having a hard time 
>>>>>> understanding why. What am I doing wrong?
>>>>>>
>>>>>> I've included the proto file, C++ code and gdb output... (the program 
>>>>>> is both a client or a server, if you give it a command line value of "c" 
>>>>>> it 
>>>>>> acts as a client).
>>>>>>
>>>>>> Thanks in advance!
>>>>>>
>>>>>> PROTO FILE
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *syntax = "proto3";package helloworld;service Greeter{    rpc 
>>>>>> SayHello (HelloRequest) returns (stream HelloReply) {}}message 
>>>>>> HelloRequest{    string  message = 1;}message HelloReply{    string  
>>>>>> reply 
>>>>>> = 1;}*
>>>>>>
>>>>>>
>>>>>> C++ CODE
>>>>>>
>>>>>> *#include <iostream>*
>>>>>> *#include <string>*
>>>>>> *#include <grpc++/grpc++.h>*
>>>>>> *#include "minfail.grpc.pb.h"*
>>>>>>
>>>>>> *using namespace std;*
>>>>>> *using namespace helloworld;*
>>>>>>
>>>>>> *class CallData {*
>>>>>> *public:*
>>>>>> *    CallData(Greeter::AsyncService* service, 
>>>>>> grpc::ServerCompletionQueue* cq) : service_(service), cq_(cq), 
>>>>>> responder_(&ctx_), status_(CREATE) {*
>>>>>> *        Proceed();*
>>>>>> *    }*
>>>>>>
>>>>>> *    void Proceed() {*
>>>>>> *        if (status_ == CREATE) {*
>>>>>> *            status_ = PROCESS;*
>>>>>> *            service_->RequestSayHello(&ctx_, &request_, &responder_, 
>>>>>> cq_, cq_, this);*
>>>>>> *        } else if (status_ == PROCESS) {*
>>>>>> *            new CallData(service_, cq_);*
>>>>>> *            reply_.set_reply("hello " + request_.message());*
>>>>>> *            responder_.Write (reply_, this);*
>>>>>> *            responder_.Finish(grpc::Status::OK, this);*
>>>>>> *            status_ = FINISH;*
>>>>>> *        } else {*
>>>>>> *            GPR_ASSERT(status_ == FINISH);*
>>>>>> *            delete this;*
>>>>>> *        }*
>>>>>> *    }*
>>>>>>
>>>>>> *private:*
>>>>>> *    HelloRequest request_;*
>>>>>> *    HelloReply reply_;*
>>>>>> *    grpc::ServerAsyncWriter<HelloReply> responder_;*
>>>>>>
>>>>>> *    enum CallStatus { CREATE, PROCESS, FINISH };*
>>>>>> *    CallStatus status_;*
>>>>>> *    grpc::ServerContext ctx_;*
>>>>>> *    grpc::ServerCompletionQueue* cq_;*
>>>>>> *    Greeter::AsyncService* service_;*
>>>>>> *};*
>>>>>>
>>>>>> *class GreeterClient*
>>>>>> *{*
>>>>>> *public:*
>>>>>> *    GreeterClient (shared_ptr <grpc::Channel> channel)*
>>>>>> *    : stub_ (Greeter::NewStub (channel)) {}*
>>>>>> *    string*
>>>>>> *    SayHello (const string &user) {*
>>>>>> *        HelloRequest request;*
>>>>>> *        request.set_message (user);*
>>>>>> *        grpc::ClientContext context;*
>>>>>> *        unique_ptr <grpc::ClientReader <HelloReply>> reader 
>>>>>> (stub_->SayHello (&context, request));*
>>>>>> *        HelloReply reply;*
>>>>>> *        while (reader -> Read (&reply)) {*
>>>>>> *            cout << "SayHello returns " << reply.reply() << "\n";*
>>>>>> *        }*
>>>>>> *        grpc::Status status = reader -> Finish();*
>>>>>> *        if (status.ok()) {*
>>>>>> *            return (reply.reply());*
>>>>>> *        }*
>>>>>> *        return ("<RPC failed>");*
>>>>>> *    }*
>>>>>>
>>>>>> *private:*
>>>>>> *    unique_ptr<Greeter::Stub> stub_;*
>>>>>> *};*
>>>>>>
>>>>>> *int*
>>>>>> *main (int argc, char **argv)*
>>>>>> *{*
>>>>>> *    string server_address ("0.0.0.0:50051 <http://0.0.0.0:50051>");*
>>>>>>
>>>>>> *    if (argc == 2 && argv [1][0] == 'c') {*
>>>>>> *        GreeterClient greeter(grpc::CreateChannel (server_address, 
>>>>>> grpc::InsecureChannelCredentials()));*
>>>>>> *        cout << "Sending world...\n";*
>>>>>> *        cout << "Response is " << greeter.SayHello ("world") << 
>>>>>> "\n";*
>>>>>> *    } else {*
>>>>>> *        unique_ptr<grpc::ServerCompletionQueue> cq;*
>>>>>> *        Greeter::AsyncService service;*
>>>>>> *        unique_ptr<grpc::Server> server;*
>>>>>>
>>>>>> *        grpc::ServerBuilder builder;*
>>>>>>
>>>>>> *        builder.AddListeningPort(server_address, 
>>>>>> grpc::InsecureServerCredentials());*
>>>>>> *        builder.RegisterService(&service);*
>>>>>> *        cq = builder.AddCompletionQueue();*
>>>>>> *        server = builder.BuildAndStart();*
>>>>>>
>>>>>> *        new CallData(&service, cq.get());*
>>>>>> *        CallData* tag;  // uniquely identifies a request.*
>>>>>> *        bool ok;*
>>>>>> *        while (true) {*
>>>>>> *            GPR_ASSERT(cq->Next((void **)&tag, &ok));*
>>>>>> *            GPR_ASSERT(ok);*
>>>>>> *            tag->Proceed();*
>>>>>> *        }*
>>>>>>
>>>>>> *        server->Shutdown();*
>>>>>> *        cq->Shutdown();*
>>>>>> *    }*
>>>>>> *}*
>>>>>>
>>>>>> and run / GDB output:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *$ ./minfailD1115 11:45:47.919769500   24264 
>>>>>> env_linux.c:77]             Warning: insecure environment read function 
>>>>>> 'getenv' usedpure virtual method calledterminate called without an 
>>>>>> active 
>>>>>> exceptionAborted (core dumped)*
>>>>>>
>>>>>> *$ gdb ./minfail*
>>>>>> *... elided ...*
>>>>>> *Program received signal SIG36, Real-time event 36.*
>>>>>> *0x00000035ce0e8cec in epoll_pwait () from /lib64/libc.so.6*
>>>>>> *(gdb) bt*
>>>>>> *#0  0x00000035ce0e8cec in epoll_pwait () from /lib64/libc.so.6*
>>>>>> *#1  0x00007ffff76f8d4a in ?? () from /.../lib/libgrpc++.so.1*
>>>>>> *#2  0x00007ffff76f91a6 in ?? () from /.../lib/libgrpc++.so.1*
>>>>>> *#3  0x00007ffff770d61b in grpc_completion_queue_next () from 
>>>>>> /.../lib/libgrpc++.so.1*
>>>>>> *#4  0x00007ffff76e3f20 in 
>>>>>> grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) () 
>>>>>> from /.../lib/libgrpc++.so.1*
>>>>>> *#5  0x000000000040919f in grpc::CompletionQueue::Next 
>>>>>> [_ZN4grpc15Completion...] (this=0x628fa0, tag=0x7fffffffe1e8, 
>>>>>> ok=0x7fffffffe1e7) at 
>>>>>> .../include/grpc++/impl/codegen/completion_queue.h:148*
>>>>>> *#6  0x00000000004085ca in main [main] (argc=1, argv=0x7fffffffe3a8) 
>>>>>> at minfail.cc:95*
>>>>>> *(gdb)*
>>>>>>
>>>>>> Any help greatly appreciated!
>>>>>>
>>>>>> Cheers,
>>>>>> -RK
>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "grpc.io" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at https://groups.google.com/group/grpc-io.
>>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/grpc-io/34f059a0-f825-4aa3-a725-84fb61e46b1f%40googlegroups.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/grpc-io/34f059a0-f825-4aa3-a725-84fb61e46b1f%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>> On Wednesday, November 16, 2016 at 9:12:43 AM UTC-5, [email protected] 
>> wrote:
>>>
>>> Sadly, I'm still stuck. I don't know enough C++ to be able to diagnose 
>>> this further... :-(
>>>
>>> On Tuesday, November 15, 2016 at 2:01:50 PM UTC-5, [email protected] 
>>> wrote:
>>>>
>>>> Ok:
>>>>
>>>> *(gdb) handle SIG36 noprint*
>>>> *Signal        Stop      Print   Pass to program Description*
>>>> *SIG36         No        No      Yes             Real-time event 36*
>>>> *(gdb) run*
>>>> *Starting program: /.../minfail*
>>>> *[Thread debugging using libthread_db enabled]*
>>>> *D1115 13:59:40.187940393   34391 env_linux.c:77]             Warning: 
>>>> insecure environment read function 'getenv' used*
>>>> *[New Thread 0x7ffff6fcc700 (LWP 34394)]*
>>>> *[New Thread 0x7ffff65cb700 (LWP 34395)]*
>>>> *[New Thread 0x7ffff5bca700 (LWP 34396)]*
>>>> *[New Thread 0x7ffff51c9700 (LWP 34397)]*
>>>> *[New Thread 0x7ffff47c8700 (LWP 34398)]*
>>>> *[New Thread 0x7ffff3dc7700 (LWP 34399)]*
>>>> *[New Thread 0x7ffff33c6700 (LWP 34400)]*
>>>> *[New Thread 0x7ffff29c5700 (LWP 34401)]*
>>>> *[New Thread 0x7ffff1fc4700 (LWP 34402)]*
>>>> *[New Thread 0x7ffff15c3700 (LWP 34403)]*
>>>> *[New Thread 0x7ffff0bc2700 (LWP 34404)]*
>>>> *[New Thread 0x7ffff01c1700 (LWP 34405)]*
>>>> *[New Thread 0x7fffef7c0700 (LWP 34406)]*
>>>> *[New Thread 0x7fffeedbf700 (LWP 34407)]*
>>>> *[New Thread 0x7fffee3be700 (LWP 34408)]*
>>>> *[New Thread 0x7fffed9bd700 (LWP 34409)]*
>>>> *pure virtual method called*
>>>> *terminate called without an active exception*
>>>>
>>>> *Program received signal SIGABRT, Aborted.*
>>>> *0x00000035ce0325e5 in raise () from /lib64/libc.so.6*
>>>> *(gdb) bt*
>>>> *#0  0x00000035ce0325e5 in raise () from /lib64/libc.so.6*
>>>> *#1  0x00000035ce033dc5 in abort () from /lib64/libc.so.6*
>>>> *#2  0x00000035d4cbea7d in __gnu_cxx::__verbose_terminate_handler() () 
>>>> from /usr/lib64/libstdc++.so.6*
>>>> *#3  0x00000035d4cbcbd6 in ?? () from /usr/lib64/libstdc++.so.6*
>>>> *#4  0x00000035d4cbcc03 in std::terminate() () from 
>>>> /usr/lib64/libstdc++.so.6*
>>>> *#5  0x00000035d4cbd55f in __cxa_pure_virtual () from 
>>>> /usr/lib64/libstdc++.so.6*
>>>> *#6  0x00007ffff76e3f7a in 
>>>> grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) () 
>>>> from /.../lib/libgrpc++.so.1*
>>>> *#7  0x000000000040919f in grpc::CompletionQueue::Next 
>>>> [_ZN4grpc15Completion...] (this=0x628fa0, tag=0x7fffffffe1e8, 
>>>> ok=0x7fffffffe1e7) at 
>>>> .../include/grpc++/impl/codegen/completion_queue.h:148*
>>>> *#8  0x00000000004085ca in main [main] (argc=1, argv=0x7fffffffe3a8) at 
>>>> minfail.cc:95*
>>>> *(gdb)*
>>>>
>>>>
>>>> On Tuesday, November 15, 2016 at 1:55:48 PM UTC-5, Craig Tiller wrote:
>>>>>
>>>>> You probably want to first do 'handle SIG36 noprint' to let gdb pass 
>>>>> the (totally legitimate) signal to the application.
>>>>>
>>>>> On Tue, Nov 15, 2016 at 8:56 AM <[email protected]> wrote:
>>>>>
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I've created a tiny code sample that is based off the hello world 
>>>>>> async greeter example. I keep getting a "pure virtual method called" in 
>>>>>> the 
>>>>>> grpc_completion_queue_next() function, and I'm having a hard time 
>>>>>> understanding why. What am I doing wrong?
>>>>>>
>>>>>> I've included the proto file, C++ code and gdb output... (the program 
>>>>>> is both a client or a server, if you give it a command line value of "c" 
>>>>>> it 
>>>>>> acts as a client).
>>>>>>
>>>>>> Thanks in advance!
>>>>>>
>>>>>> PROTO FILE
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *syntax = "proto3";package helloworld;service Greeter{    rpc 
>>>>>> SayHello (HelloRequest) returns (stream HelloReply) {}}message 
>>>>>> HelloRequest{    string  message = 1;}message HelloReply{    string  
>>>>>> reply 
>>>>>> = 1;}*
>>>>>>
>>>>>>
>>>>>> C++ CODE
>>>>>>
>>>>>> *#include <iostream>*
>>>>>> *#include <string>*
>>>>>> *#include <grpc++/grpc++.h>*
>>>>>> *#include "minfail.grpc.pb.h"*
>>>>>>
>>>>>> *using namespace std;*
>>>>>> *using namespace helloworld;*
>>>>>>
>>>>>> *class CallData {*
>>>>>> *public:*
>>>>>> *    CallData(Greeter::AsyncService* service, 
>>>>>> grpc::ServerCompletionQueue* cq) : service_(service), cq_(cq), 
>>>>>> responder_(&ctx_), status_(CREATE) {*
>>>>>> *        Proceed();*
>>>>>> *    }*
>>>>>>
>>>>>> *    void Proceed() {*
>>>>>> *        if (status_ == CREATE) {*
>>>>>> *            status_ = PROCESS;*
>>>>>> *            service_->RequestSayHello(&ctx_, &request_, &responder_, 
>>>>>> cq_, cq_, this);*
>>>>>> *        } else if (status_ == PROCESS) {*
>>>>>> *            new CallData(service_, cq_);*
>>>>>> *            reply_.set_reply("hello " + request_.message());*
>>>>>> *            responder_.Write (reply_, this);*
>>>>>> *            responder_.Finish(grpc::Status::OK, this);*
>>>>>> *            status_ = FINISH;*
>>>>>> *        } else {*
>>>>>> *            GPR_ASSERT(status_ == FINISH);*
>>>>>> *            delete this;*
>>>>>> *        }*
>>>>>> *    }*
>>>>>>
>>>>>> *private:*
>>>>>> *    HelloRequest request_;*
>>>>>> *    HelloReply reply_;*
>>>>>> *    grpc::ServerAsyncWriter<HelloReply> responder_;*
>>>>>>
>>>>>> *    enum CallStatus { CREATE, PROCESS, FINISH };*
>>>>>> *    CallStatus status_;*
>>>>>> *    grpc::ServerContext ctx_;*
>>>>>> *    grpc::ServerCompletionQueue* cq_;*
>>>>>> *    Greeter::AsyncService* service_;*
>>>>>> *};*
>>>>>>
>>>>>> *class GreeterClient*
>>>>>> *{*
>>>>>> *public:*
>>>>>> *    GreeterClient (shared_ptr <grpc::Channel> channel)*
>>>>>> *    : stub_ (Greeter::NewStub (channel)) {}*
>>>>>> *    string*
>>>>>> *    SayHello (const string &user) {*
>>>>>> *        HelloRequest request;*
>>>>>> *        request.set_message (user);*
>>>>>> *        grpc::ClientContext context;*
>>>>>> *        unique_ptr <grpc::ClientReader <HelloReply>> reader 
>>>>>> (stub_->SayHello (&context, request));*
>>>>>> *        HelloReply reply;*
>>>>>> *        while (reader -> Read (&reply)) {*
>>>>>> *            cout << "SayHello returns " << reply.reply() << "\n";*
>>>>>> *        }*
>>>>>> *        grpc::Status status = reader -> Finish();*
>>>>>> *        if (status.ok()) {*
>>>>>> *            return (reply.reply());*
>>>>>> *        }*
>>>>>> *        return ("<RPC failed>");*
>>>>>> *    }*
>>>>>>
>>>>>> *private:*
>>>>>> *    unique_ptr<Greeter::Stub> stub_;*
>>>>>> *};*
>>>>>>
>>>>>> *int*
>>>>>> *main (int argc, char **argv)*
>>>>>> *{*
>>>>>> *    string server_address ("0.0.0.0:50051 <http://0.0.0.0:50051>");*
>>>>>>
>>>>>> *    if (argc == 2 && argv [1][0] == 'c') {*
>>>>>> *        GreeterClient greeter(grpc::CreateChannel (server_address, 
>>>>>> grpc::InsecureChannelCredentials()));*
>>>>>> *        cout << "Sending world...\n";*
>>>>>> *        cout << "Response is " << greeter.SayHello ("world") << 
>>>>>> "\n";*
>>>>>> *    } else {*
>>>>>> *        unique_ptr<grpc::ServerCompletionQueue> cq;*
>>>>>> *        Greeter::AsyncService service;*
>>>>>> *        unique_ptr<grpc::Server> server;*
>>>>>>
>>>>>> *        grpc::ServerBuilder builder;*
>>>>>>
>>>>>> *        builder.AddListeningPort(server_address, 
>>>>>> grpc::InsecureServerCredentials());*
>>>>>> *        builder.RegisterService(&service);*
>>>>>> *        cq = builder.AddCompletionQueue();*
>>>>>> *        server = builder.BuildAndStart();*
>>>>>>
>>>>>> *        new CallData(&service, cq.get());*
>>>>>> *        CallData* tag;  // uniquely identifies a request.*
>>>>>> *        bool ok;*
>>>>>> *        while (true) {*
>>>>>> *            GPR_ASSERT(cq->Next((void **)&tag, &ok));*
>>>>>> *            GPR_ASSERT(ok);*
>>>>>> *            tag->Proceed();*
>>>>>> *        }*
>>>>>>
>>>>>> *        server->Shutdown();*
>>>>>> *        cq->Shutdown();*
>>>>>> *    }*
>>>>>> *}*
>>>>>>
>>>>>> and run / GDB output:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *$ ./minfailD1115 11:45:47.919769500   24264 
>>>>>> env_linux.c:77]             Warning: insecure environment read function 
>>>>>> 'getenv' usedpure virtual method calledterminate called without an 
>>>>>> active 
>>>>>> exceptionAborted (core dumped)*
>>>>>>
>>>>>> *$ gdb ./minfail*
>>>>>> *... elided ...*
>>>>>> *Program received signal SIG36, Real-time event 36.*
>>>>>> *0x00000035ce0e8cec in epoll_pwait () from /lib64/libc.so.6*
>>>>>> *(gdb) bt*
>>>>>> *#0  0x00000035ce0e8cec in epoll_pwait () from /lib64/libc.so.6*
>>>>>> *#1  0x00007ffff76f8d4a in ?? () from /.../lib/libgrpc++.so.1*
>>>>>> *#2  0x00007ffff76f91a6 in ?? () from /.../lib/libgrpc++.so.1*
>>>>>> *#3  0x00007ffff770d61b in grpc_completion_queue_next () from 
>>>>>> /.../lib/libgrpc++.so.1*
>>>>>> *#4  0x00007ffff76e3f20 in 
>>>>>> grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) () 
>>>>>> from /.../lib/libgrpc++.so.1*
>>>>>> *#5  0x000000000040919f in grpc::CompletionQueue::Next 
>>>>>> [_ZN4grpc15Completion...] (this=0x628fa0, tag=0x7fffffffe1e8, 
>>>>>> ok=0x7fffffffe1e7) at 
>>>>>> .../include/grpc++/impl/codegen/completion_queue.h:148*
>>>>>> *#6  0x00000000004085ca in main [main] (argc=1, argv=0x7fffffffe3a8) 
>>>>>> at minfail.cc:95*
>>>>>> *(gdb)*
>>>>>>
>>>>>> Any help greatly appreciated!
>>>>>>
>>>>>> Cheers,
>>>>>> -RK
>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "grpc.io" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at https://groups.google.com/group/grpc-io.
>>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/grpc-io/34f059a0-f825-4aa3-a725-84fb61e46b1f%40googlegroups.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/grpc-io/34f059a0-f825-4aa3-a725-84fb61e46b1f%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/e32b06a1-68c1-4f1d-9b5a-4e6af65ee96d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to