TarsCloud / TarsCpp

C++ language framework rpc source code implementation
BSD 3-Clause "New" or "Revised" License
520 stars 254 forks source link

Exception: autoptr null handle error![N4tars12CommunicatorE] #290

Closed duansumin2022 closed 9 months ago

duansumin2022 commented 1 year ago

TARS_VERSION: 3.0.1

client rpc调用的时候抛出异常(非必现异常,偶发异常):Exception: autoptr null handle error![N4tars12CommunicatorE] 业务prx rpc调用抛异常

BeyondWUXF commented 1 year ago

好像是没创建Communicator

duansumin2022 commented 1 year ago

好像是没创建Communicator

通过 new tars::Communicator(); 创建的Communicator,然后把_comm 传给sdkAgent,在sdkAgent的init里面,通过_comm创建SDKServantPrx:

tars::Communicator* _comm = new tars::Communicator();
if(_comm == NULL)
     return;
    ....
LocalRollLogger::getInstance()->setLogInfo("S000", app, logpath);
LocalRollLogger::getInstance()->logger()->setLogLevel(logLevel);
sdkAgent = new SDKAgent ();
sdkAgent ->init(_comm);

SDKAgent ::init函数:

int SDKAgent ::init(Communicator* comm){
...
comm->stringToProxy(serverObjName , prx); // typedef tars::TC_AutoPtr<SDKServantProxy> SDKServantPrx;
...
}

是不是Communicator使用的方式,或者prx服务句柄的获取方式不对呢?

BeyondWUXF commented 1 year ago

typedef tars::TC_AutoPtr<SDKServant***> SDKServantPrx;应该这样吧

duansumin2022 commented 1 year ago

typedef tars::TC_AutoPtr<SDKServant***> SDKServantPrx;应该这样吧 typedef tars::TC_AutoPtr<SDKServantProxy>SDKServantPrx; 是这样的,上一条好像没有显示出来。

ruanshudong commented 1 year ago

最新版已经修复了吧?用最新版本试一试

duansumin2022 commented 1 year ago

最新版已经修复了吧?用最新版本试一试

您好,这是什么问题,有修复记录吗?生产环境也用的是这个版本

ruanshudong commented 1 year ago

应该是最新的tag版本才发现和修复这个问题

ruanshudong commented 1 year ago

https://github.com/TarsCloud/TarsCpp/commit/3b90fd870d13a947a2232b8d2ddf4ef5cfd07836 应该是这个修改的

duansumin2022 commented 1 year ago

3b90fd8 应该是这个修改的

是这个问题