[ 
https://issues.apache.org/jira/browse/THRIFT-2243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13812506#comment-13812506
 ] 

Ben Craig commented on THRIFT-2243:
-----------------------------------

I am confused about the client side.  The code you have posted doesn't ever do 
anything with MyService.Client, or with the binary protocol.  Does the server 
crash still reproduce if you reduce the client code to the following:

transport = TSocket.TSocket(host, port)
transport.open()

For what it's worth, I haven't been able to reproduce the issue on Windows, 
with a C++ client.

> TNonblockingServer in thrift crashes when TFramedTransport opens
> ----------------------------------------------------------------
>
>                 Key: THRIFT-2243
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2243
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.8, 0.9.1
>         Environment: Ubuntu 12.04
>            Reporter: julien greard
>            Priority: Blocker
>              Labels: nonblocking
>             Fix For: 0.9.2
>
>
> This bug is also a question on StackOverflow, the code extracts are easier to 
> read here : 
> http://stackoverflow.com/questions/19586340/tnonblockingserver-in-thrift-crashes-when-tframedtransport-opens
> I've been trying to implement a thrift server in C++ to communicate with a 
> Python client.
> here is my code:
> C++ server:
>     
>     shared_ptr<ThriftHandler> _handler (new myHandler());
>     shared_ptr<TProcessor> _processor (new myService(_handler));
>     shared_ptr<TProtocolFactory> _protocolFactory (new 
> TBinaryProtocolFactory());
>     shared_ptr<ThreadManager> _threadManager = 
> ThreadManager::newSimpleThreadManager(15);
>     shared_ptr<PosixThreadFactory> _threadFactory(new PosixThreadFactory());
>     _threadManager->threadFactory(_threadFactory);
>     _threadManager->start();
>     shared_ptr<TNonblockingServer> _server(new TNonblockingServer(_processor, 
> _protocolFactory, 9090 ,_threadManager));;
>     _server->serve();
> Python Client code:
>     transport = TSocket.TSocket(host, port)
>     transport = TTransport.TFramedTransport(transport)
>     protocol = TBinaryProtocol.TBinaryProtocol(transport)
>     client = MyService.Client(protocol)
>     transport.open()
>     log.info("connection success!")
> When I start the server and then the client, I get the following:
> On the client side (Python):
>     ./myPythonExec.py
>     connection success!
>     socket.error: [Errno 104] Connection reset by peer
> On the server side (c++):
>     assertion " 0 " failed
>     0  0x00007ffff0942425 in __GI_raise (sig=<optimized out>) at 
> ../nptl/sysdeps/unix/sysv/linux/raise.c:64
>     1  0x00007ffff0945b8b in __GI_abort () at abort.c:91
>     2  0x00007ffff093b0ee in __assert_fail_base (fmt=<optimized out>, 
> assertion=0x7ffff1438f1a "0", 
>     file=0x7ffff1439298 "src/server/TNonblockingServer.cpp", line=<optimized 
> out>, function=<optimized out>) at assert.c:94
>     3  0x00007ffff093b192 in __GI___assert_fail (assertion=0x7ffff1438f1a 
> "0", file=0x7ffff1439298 "src/server/TNonblockingServer.cpp", 
>     line=558, function=0x7ffff1439c60 "void 
> apache::thrift::server::TNonblockingServer::TConnection::workSocket()") at 
> assert.c:103
>     4  0x00007ffff14336e4 in 
> apache::thrift::server::TNonblockingServer::TConnection::workSocket 
> (this=0x7fffc0004ac0)
>     at src/server/TNonblockingServer.cpp:558
>     5  0x00007ffff11ed94c in event_base_loop () from 
> /usr/lib/libevent-2.0.so.5
> I've tested this bug on thrift 0.8.0 and 0.9.1
> It works perfectly when using a TSimpleServer on C++ and a TBufferedTransport 
> on the client side



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to