[
https://issues.apache.org/jira/browse/THRIFT-2243?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
julien greard resolved THRIFT-2243.
-----------------------------------
Resolution: Fixed
Fix Version/s: 0.9.1
> TNonblockingServer in thrift crashes when TFramedTransport opens
> ----------------------------------------------------------------
>
> Key: THRIFT-2243
> URL: https://issues.apache.org/jira/browse/THRIFT-2243
> Project: Thrift
> Issue Type: Bug
> Affects Versions: 0.8, 0.9.1
> Environment: Ubuntu 12.04
> Reporter: julien greard
> Priority: Blocker
> Fix For: 0.9.1
>
>
> 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)