You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Henrique Mendonça (JIRA)" <ji...@apache.org> on 2013/11/04 14:06:23 UTC

[jira] [Closed] (THRIFT-2243) TNonblockingServer in thrift crashes when TFramedTransport opens

     [ https://issues.apache.org/jira/browse/THRIFT-2243?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Henrique Mendonça closed THRIFT-2243.
-------------------------------------

    Resolution: Not A Problem

> 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)